题目链接:http://poj.org/problem?id=1426
Time Limit: 1000MS | Memory Limit: 10000K | |||
Total Submissions: 34218 | Accepted: 14337 | Special Judge |
Description
Input
Output
Sample Input
2 6 19 0
Sample Output
10 100100100100100100 111111111111111111
Source
题解:
题目说答案的位数不会超过100,所以以为是:高精度 + 模运算。这样也太丧心病狂了吧!
后来实在想不到其他方法,就看了题解。结果是一道普通的搜索题,答案用long long存就够了(题目不是说位数<=100),感觉被骗了。
再一次受到了启发:面对一些题目(人生也如此)时,如果想到的方法似乎不能解决问题,但除此之外又无其他办法,那就就要放开手脚试一试,不要畏手畏脚。如果想到的唯一方法都搁置不试,那就相当于交白卷了;试一试,或许能出现意想不到的结果。
代码如下:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <vector> 7 #include <queue> 8 #include <stack> 9 #include <map> 10 #include <string> 11 #include <set> 12 #define ms(a,b) memset((a),(b),sizeof((a))) 13 using namespace std; 14 typedef long long LL; 15 const int INF = 2e9; 16 const LL LNF = 9e18; 17 const int MOD = 1e9+7; 18 const int MAXN = 200000+10; 19 20 queue<LL>q; 21 LL bfs(int n) 22 { 23 while(!q.empty()) q.pop(); 24 q.push(1); 25 26 while(!q.empty()) 27 { 28 LL x = q.front(); 29 q.pop(); 30 if(x%n==0) 31 return x; 32 q.push(1LL*x*10); 33 q.push(1LL*x*10+1); 34 } 35 } 36 37 int main() 38 { 39 int n; 40 while(scanf("%d",&n) && n) 41 { 42 cout<< bfs(n) <<endl; 43 } 44 }