poj1426之bfs打表解法
2017-10-31 11:10
239 查看
题意:给你个数n,求出一个n的倍数,满足只由1和0组成
分析:由1,10,11,101,111...往后bfs,发现Memory Limit Exceed。然后打表,轻松ac。
#include <cstdio>
using namespace std;
typedef long long ll;
int n;
queue<ll> qu;
void bfs()
{
while (!qu.empty()){
ll ans = qu.front();qu.pop();
if(ans % n == 0){
printf("%lld,\n",ans);
return;
}
qu.push(ans*10);
qu.push(ans*10+1);
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
for (int i = 1; i < 201; i += 1){
n = i;
while (!qu.empty()) qu.pop();
qu.push(1);
bfs();
}
return 0;
}
分析:由1,10,11,101,111...往后bfs,发现Memory Limit Exceed。然后打表,轻松ac。
打表:
#include <queue>#include <cstdio>
using namespace std;
typedef long long ll;
int n;
queue<ll> qu;
void bfs()
{
while (!qu.empty()){
ll ans = qu.front();qu.pop();
if(ans % n == 0){
printf("%lld,\n",ans);
return;
}
qu.push(ans*10);
qu.push(ans*10+1);
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
for (int i = 1; i < 201; i += 1){
n = i;
while (!qu.empty()) qu.pop();
qu.push(1);
bfs();
}
return 0;
}
然后打表:
#include <cstdio> #include <cstring> #include <iostream> using namespace std; typedef long long ll; int n; ll ans[200] = { 1, 10, 111, 100, 10, 1110, 1001, 1000, 111111111, 10, 11, 11100, 1001, 10010, 1110, 10000, 11101, 1111111110, 11001, 100, 10101, 110, 110101, 111000, 100, 10010, 1101111111, 100100, 1101101, 1110, 111011, 100000, 111111, 111010, 10010, 11111111100, 111, 110010, 10101, 1000, 11111, 101010, 1101101, 1100, 1111111110, 1101010, 10011, 1110000, 1100001, 100, 100011, 100100, 100011, 11011111110, 110, 1001000, 11001, 11011010, 11011111, 11100, 100101, 1110110, 1111011111, 1000000, 10010, 1111110, 1101011, 1110100, 10000101, 10010, 10011, 111111111000, 10001, 1110, 11100, 1100100, 1001, 101010, 10010011, 10000, 1111111101, 111110, 101011, 1010100, 111010, 11011010, 11010111, 11000, 11010101, 1111111110, 1001, 11010100, 10000011, 100110, 110010, 11100000, 11100001, 11000010, 111111111111111111, 100, 101, 1000110, 11100001, 1001000, 101010, 1000110, 100010011, 110111111100, 1001010111, 110, 111, 10010000, 1011011, 110010, 1101010, 110110100, 10101111111, 110111110, 100111011, 111000, 11011, 1001010, 10001100111, 11101100, 1000, 11110111110, 11010011, 10000000, 100100001, 10010, 101001, 11111100, 11101111, 11010110, 11011111110, 11101000, 10001, 100001010, 110110101, 100100, 10011, 100110, 1001, 1111111110000, 11011010, 100010, 1100001, 11100, 110111, 11100, 1110001, 11001000, 10111110111, 10010, 1110110, 1010100, 10101101011, 100100110, 100011, 100000, 11101111, 11111111010, 1010111, 1111100, 1111110, 1010110, 11111011, 10101000, 10111101, 111010, 1111011111, 110110100, 1011001101, 110101110, 100100, 110000, 100101111, 110101010, 11010111, 11111111100, 1001111, 10010, 100101, 110101000, 1110, 100000110, 1001011, 1001100, 1010111010111, 110010, 11101111, 111000000, 11001, 111000010, 101010, 110000100, 1101000101, 1111111111111111110, 111000011, 1000 }; int main() { while (cin >> n,n) cout << ans[n-1] << endl; return 0; }
相关文章推荐
- poj-1426 Find The Multiple BFS打表
- UVALive2701 UVA1189 POJ1426 ZOJ1530 Find The Multiple【BFS】
- hdu1043 Eight(A*/双向BFS/单项BFS打表+康托展开)
- leetCode-Surrounded Regions DFS与BFS解法
- HDU 1043 Eight(BFS打表+状态去重)
- (POJ1426)Find The Multiple <BFS 大数模>
- UVA - 572 Oil Deposits(DFS和BFS两种解法)
- POJ1426 Find The Multiple(BFS)
- BFS 同余模定理 poj1426
- hdu 1372 AND poj 2243 bfs和双向bfs两种解法
- [置顶] HihoCoder 1233 Boxes(bfs打表)
- 360笔试编程题 找老乡(BFS解法)
- UVA - 10004 Bicoloring (dfs和bfs两种解法)
- POJ 1426 Find The Multiple——bfs + 模运算 + 打表
- 保存一棵树根到叶子之和为给定值的所有路径的BFS解法
- poj3669 之bfs解法
- Prime Path BFS 打表求素数
- poj1426(bfs dfs)
- Rescue 3解法:(1.DFS 2. BFS 3.BFS+优先队列模板)
- POJ1426: Find The Multiple(bfs,同余定理)