POJ 1426 Find The Multiple(不断学习!)
来源:互联网 发布:淘宝确认收货后退运费 编辑:程序博客网 时间:2024/05/17 22:56
【题意简述】:输入一个数,找出它的一个倍数,这个倍数只能用0和1表示。
【思路】:一开始想到的是用简单的朴素的BFS,用队列帮助实现,可是超时!这个是超时代码:
#include<iostream>#include<cstring>#include<queue>using namespace std;__int64 bfs(int m){queue<__int64> q;__int64 temp;q.push(1);while(!q.empty()){temp = q.front();q.pop();if(temp%m == 0)return temp;q.push(temp*10+1);q.push(temp*10);}return 0;}int main(){int n;while(cin>>n&&n){cout<<bfs(n)<<endl;}return 0;}
后来学习别人的解题报告找到优化的方法!每一步都可以取余,解决了大数问题!这个代码是别人的:優YoU http://user.qzone.qq.com/289065406/blog/1303946967
//Memory Time//2236K 32MS #include<iostream>using namespace std;int mod[524286]; //保存每次mod n的余数 //由于198的余数序列是最长的 //经过反复二分验证,436905是能存储198余数序列的最少空间 //但POJ肯定又越界测试了...524286是AC的最低下限,不然铁定REint main(int i){int n;while(cin>>n){if(!n)break;mod[1]=1%n; //初始化,n倍数的最高位必是1for(i=2;mod[i-1]!=0;i++) //利用同余模定理,从前一步的余数mod[i/2]得到下一步的余数mod[i]mod[i]=(mod[i/2]*10+i%2)%n; //mod[i/2]*10+i%2模拟了BFS的双入口搜索 //当i为偶数时,+0,即取当前位数字为0 。为奇数时,则+1,即取当前位数字为1i--;int pm=0;while(i){mod[pm++]=i%2; //把*10操作转化为%2操作,逆向求倍数的每一位数字i/=2;}while(pm)cout<<mod[--pm]; //倒序输出cout<<endl;}return 0;}
这个代码也是可以AC的:From: http://www.cnblogs.com/crazyapple/archive/2013/06/03/3116169.html
#include<iostream>#include<stdio.h>#include<string.h>#include<queue>using namespace std; __int64 mod[600000]; int main(){ int n; while(~scanf("%d",&n)&&n) { int i; for(i=1;;i++) { mod[i]=mod[i/2]*10+i%2; if(mod[i]%n==0) { break; } } printf("%I64d\n",mod[i]); } return 0;}
0 0
- POJ 1426 Find The Multiple(不断学习!)
- Find The Multiple(POJ 1426)
- POJ 1426 Find The Multiple (DFS)
- POJ - 1426 - Find The Multiple (DFS)
- POJ 1426 Find The Multiple(dfs)
- POJ 1426 Find The Multiple(dfs)
- POJ 1426 Find The Multiple(dfs)
- POJ 1426 Find The Multiple (bfs)
- poj 1426 Find The Multiple(搜索)
- poj 1426 Find The Multiple(DFS)
- POJ 1426Find The Multiple(DFS)
- poj 1426 Find The Multiple(bfs)
- POJ 1426 Find The Multiple (BFS)
- POJ 1426 Find the Multiple(dfs)
- POJ-1426 Find The Multiple(深搜)
- POJ.1426 Find The Multiple (BFS)
- Find The Multiple(poj 1426)
- POJ-1426-Find The Multiple(DFS)
- Android -- 图片处理, 画画板,缩放,旋转,平移,镜面,倒影,图片合成,颜色处理
- oracle 之 checkpoint
- NYOJ171-聪明的kk
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)
- unity3D游戏开发三之unity编辑器二
- POJ 1426 Find The Multiple(不断学习!)
- ecshop中ajax的调用原理
- linux下sar命令解析 (性能相关以及性能调试)
- NYoj 491
- 什么是云计算
- MonogDB -索引 (三) GIS
- 常用上网增强类Chrome扩展
- 索引_举例:IO成本:全表扫描 < 走索引
- 六.使用OpenCv将图像转化为灰度图像