解题思路:

1)每5位为一个基数,枚举5位所有只包含0,1的数ans[],map[i][j]保存(ans[j]*100000^i)%n的值

2)BFS计算所有组合出现的模,直到出现0

代码

#include <iostream>
using namespace std;

#define MAXN 201
#define radix 100000
const int eu[] = {1,10,11,100,101,110,111,1000,1001,1010,1011,1100,1101,1110,1111,10000,10001,10010,10011,10100,10101,10110,10111,11000,11001,11010,11011,11100,11101,11110,11111};
int main()
{
bool visit[MAXN];
int id[MAXN][2],mod[20][32], q[MAXN], next[MAXN], ans[20];
int n, p, i, j, k, t, iter, e;
while (scanf("%d", &n)&&n)
{
for(i=0;i<MAXN;i++)visit[i]=0,next[i]=-1;
memset(ans, 0, sizeof(ans));
for(i = 0;i < 20; i++)
{
for (j=0;j<31;j++)
{
if(i>0)mod[i][j] = (mod[i-1][j]*radix)%n;
else mod[i][j] = eu[j] % n;
if(i==0&&!visit[mod[i][j]])visit[mod[i][j]]=true,id[mod[i][j]][0]=i,id[mod[i][j]][1]=j;
}
}
for(p=i=0;i<n;i++)if(visit[i])q[p++]=i;
for (i=1;i<20&&!visit[0];i++)
{
for(e=p,j=0;j<31&&!visit[0];j++)
{
t = mod[i][j];
if(t==0)
int b = 0;
if(!visit[t])visit[t]=true,id[t][0]=i,id[t][1]=j,q[p++]=t;
for(k=0;k<e&&!visit[0];k++)
{
t = (mod[i][j] + q[k]) % n;
if(t==0)
int b = 0;
if(!visit[t])visit[t]=true,id[t][0]=i,id[t][1]=j,next[t]=q[k],q[p++]=t;
}
}
}
for (iter=id[0][0],i=0;i!=-1;i=next[i])
{
j=id[i][0],k=id[i][1];
p=iter-j;
ans[p]=eu[k];
}
printf("%d",ans[0]);
for (i=1;i<=iter;i++)
printf("%05d", ans[i]);
printf("\n");
}
return 0;
}

转载于:https://www.cnblogs.com/ltang/archive/2010/12/17/1909127.html

POJ 1426 Find The Multiple相关推荐

  1. poj 1426 Find The Multiple (简单搜索dfs)

    题目: Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal ...

  2. POJ 1426 Find The Multiple BFS

    没什么好说的 从1开始进行广搜,因为只能包涵0和1,所以下一次需要搜索的值为next=now*10 和 next=now*10+1,每次判断一下就可以了,但是我一直不太明白我的代码为什么C++提交会错 ...

  3. Find The Multiple POJ - 1426(只包含01的十进制倍数(同余模定理))

    Find The Multiple POJ - 1426 为了避免各位没心情看我的TLE 的过程,直接告诉你,最后两个代码是AC代码 bfs一位一位枚举,知道会爆LONG LONG 还是怀着侥幸心理试 ...

  4. Find The Multiple POJ - 1426 (BFS)

    题目大意 给定一个整数,寻找一个只有0,1构成的十进制数使得这个数能够整除这个整数 解法 直接bfs第一位放入1,之后每一位放入1或者0 代码 #include <iostream> #i ...

  5. poj - 2356 Find a multiple

    http://poj.org/problem?id=2356 题意:给你n个数,找出几个数,使他们的和是n的倍数:有多少数组成 ,输出哪几个数 题解:鸽巢原理.(1)当前n项和对n取模为0 输出前n个 ...

  6. POJ 2356 Find a multiple 神题 传说中的经典.

    题目 Description The input contains N natural (i.e. positive integer) numbers ( N <= 10000 ). Each ...

  7. POJ 2356 Find a multiple (抽屉原理)

    感觉这个题很不错,至少开始真的没想道可以用抽屉原理推出一个结论,然后把这题秒掉.... 已知有n个元素,sum[i]表示从1到i所有数的和...sum[i]%n可以得到一个剩余系,如果出现0,那么结果 ...

  8. poj 1426 BFS

    一个数n,求一个数m,m由0和1构成,且是n的倍数,若存在多个可任意输出一个即可 数字不会超过19位,用long long int保存. #pragma warning(disable:4996) # ...

  9. 翻译D26(附AC码 POJ 24:Divisor and Multiple)

    " Ctrl AC!一起 AC!" 原题: Divisor and Multipley 我的翻译: 描述 给定D和M.D是A和B的除数,M是A和B的倍数.求A和B. 输入 两个正整 ...

最新文章

  1. Centos 7.5 安装Zabbix4.0
  2. linux gcc 与 glibc 的关系 glibc版本查看
  3. Elasticsearch-6.7.0系列(六)ES设置集群密码
  4. python创建与遍历List二维列表
  5. CNS级lncRNA权威文章解读及前沿发展
  6. 搜索引擎优化网页设计:最佳实践
  7. (Easy) FizzBuzz LeetCode
  8. hdu 1460 完数
  9. Qt: 非阻塞时间延迟;
  10. NOIP2008pj luoguP1058 立体图 模拟
  11. javaweb开发后端常用技术_java web后端开发技术
  12. 用友软件用友二次开发用友单据导入用友凭证导入工具用友EXCEL导入工具EXCEL导入凭证
  13. Django 点击刷新验证码
  14. 工业机器人的构成和分类
  15. java中length的使用法_java -length的三种用法说明
  16. refresh是什么?Spring refresh的12个步骤
  17. 【雕爷学编程】Arduino动手做(76)---2路光耦继电器模块
  18. 2015物联网白皮书:全球物联网正在进入发展新阶段
  19. 交叉谱分析——Python
  20. 都说在阿里年薪百万不难,面试入职阿里需要准备什么?

热门文章

  1. (已解决)IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY。Someone could be eavesdropping on you
  2. pytorch中的torch.tensor.repeat以及torch.tensor.expand用法
  3. 人为什么要睡觉?科学家给出进一步答案
  4. 机器学习漫谈:深度学习的辉煌
  5. 化身“监工”的AI,我们该如何相处?
  6. 人工智能的现状与未来
  7. 学界 | UC伯克利发布一个低成本家居机器人,会叠衣服、会泡咖啡
  8. 新技术不断涌现,下一代云计算的突破口在哪里?
  9. 实现计算机界“大满贯”,芮勇博士再获技术成就大奖
  10. 买房必看!又一程序员自编“购房宝典”火爆 GitHub