1 /* 2 题意:找出一个0和1组成的数字能整除n 3 DFS:200的范围内不会爆long long,DFS水过~ 4 */ 5 /************************************************ 6 Author :Running_Time 7 Created Time :2015-8-2 14:21:51 8 File Name :POJ_1426.cpp 9 *************************************************/ 10 11 #include <cstdio> 12 #include <algorithm> 13 #include <iostream> 14 #include <sstream> 15 #include <cstring> 16 #include <cmath> 17 #include <string> 18 #include <vector> 19 #include <queue> 20 #include <deque> 21 #include <stack> 22 #include <list> 23 #include <map> 24 #include <set> 25 #include <bitset> 26 #include <cstdlib> 27 #include <ctime> 28 using namespace std; 29 30 typedef long long ll; 31 const int MAXN = 1e4 + 10; 32 const int INF = 0x3f3f3f3f; 33 const int MOD = 1e9 + 7; 34 ll n; 35 bool ok; 36 37 void DFS(ll x, int step, int dep) { 38 if (ok) return ; 39 if (step >= dep) return ; 40 if (x % n == 0) { 41 printf ("%I64d\n", x); 42 ok = true; return ; 43 } 44 DFS (x * 10, step + 1, dep); 45 DFS (x * 10 + 1, step + 1, dep); 46 } 47 48 int main(void) { //POJ 1426 Find The Multiple 49 while (scanf ("%I64d", &n) == 1) { 50 if (!n) break; 51 ok = false; ll dep = 1; 52 while (true) { 53 if (ok) break; 54 DFS (1, 0, dep); dep++; 55 } 56 } 57 58 return 0; 59 }
1 /* 2 BFS+同余模定理:mod数组保存,每一位的余数,当前的数字由少一位的数字递推, 3 比如4(100)可以从2(10)递推出,网上的代码太吊,膜拜之 4 详细解释:http://blog.csdn.net/lyy289065406/article/details/6647917 5 */ 6 /************************************************ 7 Author :Running_Time 8 Created Time :2015-8-2 15:14:33 9 File Name :POJ_1426_BFS.cpp 10 *************************************************/ 11 12 #include <cstdio> 13 #include <algorithm> 14 #include <iostream> 15 #include <sstream> 16 #include <cstring> 17 #include <cmath> 18 #include <string> 19 #include <vector> 20 #include <queue> 21 #include <deque> 22 #include <stack> 23 #include <list> 24 #include <map> 25 #include <set> 26 #include <bitset> 27 #include <cstdlib> 28 #include <ctime> 29 using namespace std; 30 31 #define lson l, mid, rt << 1 32 #define rson mid + 1, r, rt << 1 | 1 33 typedef long long ll; 34 const int MAXN = 1e6 + 10; 35 const int INF = 0x3f3f3f3f; 36 const int MOD = 1e9 + 7; 37 int mod[MAXN]; 38 int ans[MAXN]; 39 40 int main(void) { 41 int n; 42 while (scanf ("%d", &n) == 1) { 43 if (!n) break; 44 mod[1] = 1; int i; 45 for (i=2; mod[i-1]; ++i) { 46 mod[i] = (mod[i/2] * 10 + (i&1)) % n; //BFS双入口模拟 47 } 48 int t = 0; i--; 49 while (i) { 50 ans[++t] = i & 1; 51 i /= 2; 52 } 53 while (t) { 54 printf ("%d", ans[t--]); 55 } 56 puts (""); 57 } 58 59 return 0; 60 }
BFS
时间: 2024-08-06 11:58:17