POJ 1426(BFS+辗转相除法)
2018-02-01 14:54
78 查看
题目链接:点击打开链接
题目大意:找到一个可以整除n的,只含有1和0的正整数。
题目思路:刚开始很明显就想到,如果你用while然后从1开始一直++直到找到整除n的肯定是要超时的,然后题目给了条件只含有1和0,然后就会让人想到,一个非常非常多嵌套的for循环,然后测试每一种情况(00000001,00000010,00000011,00000100……),显然是不现实的。
重点来了
这道题出现在搜索专题刚开始就让我很纳闷..毕竟之前做过的搜索都是跟图论结合的....后来其实也是搜了下题解很好奇这个怎么用搜索做,其实说它不是搜索吧也确实是,它的思想就是跟队列一模一样的。
我来模拟一下它的过程。首先先在队列中放入1,看%n是否等于0,否的话,把1*10和1*10+1放入队列,把1扔出去,然后把1*10拉过来,%n不等于0的话再*10和*10+1放入队列,放在后面排队,吧1*10+1拉过来这样的话,队列中的数字分别是这样的(1)->(10,11)->(100,101,110,111),就这样就把所有的情况都考虑了很强势。
同时这道题有两个注意点:第一,有些数字特别大需要long long,比如n是198的时候,答案是1111111111111111110,爆int直接输出负的;第二,同样跟数字大有关,由于数字太大,所以取模需要用到辗转相除法,否则同样会超时。
以下附上代码:
题目大意:找到一个可以整除n的,只含有1和0的正整数。
题目思路:刚开始很明显就想到,如果你用while然后从1开始一直++直到找到整除n的肯定是要超时的,然后题目给了条件只含有1和0,然后就会让人想到,一个非常非常多嵌套的for循环,然后测试每一种情况(00000001,00000010,00000011,00000100……),显然是不现实的。
重点来了
这道题出现在搜索专题刚开始就让我很纳闷..毕竟之前做过的搜索都是跟图论结合的....后来其实也是搜了下题解很好奇这个怎么用搜索做,其实说它不是搜索吧也确实是,它的思想就是跟队列一模一样的。
我来模拟一下它的过程。首先先在队列中放入1,看%n是否等于0,否的话,把1*10和1*10+1放入队列,把1扔出去,然后把1*10拉过来,%n不等于0的话再*10和*10+1放入队列,放在后面排队,吧1*10+1拉过来这样的话,队列中的数字分别是这样的(1)->(10,11)->(100,101,110,111),就这样就把所有的情况都考虑了很强势。
同时这道题有两个注意点:第一,有些数字特别大需要long long,比如n是198的时候,答案是1111111111111111110,爆int直接输出负的;第二,同样跟数字大有关,由于数字太大,所以取模需要用到辗转相除法,否则同样会超时。
以下附上代码:
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; int gcd(long long a,long long b){ return b==0?a:gcd(b,a%b); } int main(){ int n; long long temp; queue<long long>q; while(~scanf("%d",&n)&&n){ while(!q.empty()){ q.pop(); } q.push(1); while(!q.empty()){ temp=q.front(); q.pop(); if(temp%n!=0){ q.push(temp*10); q.push(temp*10+1); } else{ break; } } printf("%lld\n",temp); } return 0; }
相关文章推荐
- POJ 1426 Find The Multiple
- POJ1426 Find The Multiple (宽搜思想)
- POJ 1426 Find The Multiple(dfs)
- POJ1426-Find The Multiple(二叉树BFS + 同余定理)
- POJ 1426
- poj1426之一深搜
- poj 1426 Find The Multiple
- poj 1426
- poj-1426-Find The Multiple
- POJ 1426 Find The Multiple
- 【POJ】1426 Find The Multiple(暴力|同余模定理|BFS)
- POJ 1426 Find The Multiple【BFS】
- Poj(1426),BFS
- poj 1426
- POJ 1426-Find The Multiple
- POJ 1426 Fine The Multiple BFS 深搜
- POJ 1426 Find The Multiple(BFS)
- POJ 1426 Find The Multiple 【BFS】
- POJ 1426 Find The Multiple (bfs搜索)
- poj 1426 Find The Multiple ( dfs )