/**
* 搜索题:BFS
* 一开始这题题意理解错了,以为01串是二进制表示,题意是十进制表示。
* 用BFS的思路就是, 首先顶点就是1,放入队列中,每次对队首元素的操作就是
* 在该数的后面添加1或者0得到两个新的数newx, newy后判断是否是n的倍数,是的话break
* 不是的话放回队列继续循环。
* 这题一开始wa了,不知道怎么错的,之后把数组弄大之后就A了。
* Don't know why, 难道数据很大?
*/
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <map>
#include <algorithm>
#define INF 0x7fffffff
#define MAXS 10000000
using namespace std;
long long q[MAXS];
int n, rear, front;
int main()
{
while(scanf("%d", &n), n) {
rear = 0;
front = 0;
q[rear++] = 1;
long long cur, newx, newy;
while(rear >= front) {
cur = q[front ++];
newx = 10 * cur;
newy = 10 * cur + 1;
if(newx % n == 0) {
printf("%lld\n", newx);
break;
} else if(newy % n == 0) {
printf("%lld\n", newy);
break;
}
q[rear ++] = newx;
if(rear == MAXS - 1) rear = 0;
q[rear ++] = newy;
if(rear == MAXS - 1) rear = 0;
}
}
return 0;
}
POJ 1426 Fine The Multiple BFS 深搜
最新推荐文章于 2019-05-06 13:43:13 发布