题目链接
https://vjudge.net/contest/398864#problem/D
解题思路
又是搜索把我困住,我又以为会是数学题;得知用搜索后,毅然决然的选择了dfs,死活写不出来,一看题解发现是bfs。
每次输入都进行一次bfs,队列保存每种01串,队首的元素要是能整除,就break,输出。
AC代码
#include<iostream>
#include<queue>
#include<cstdio>
#define ll long long
#define sc(x) scanf("%d",&x)
#define pr(x) printf("%lld\n",x)
using namespace std;
int n;ll ans;
int main(){
while(sc(n)!=EOF&&n){
queue<ll> q;
q.push(1);
while(!q.empty()){
ans=q.front();q.pop();
if(ans%n==0) break;
ll tmp=(ans<<3)+(ans<<1);//<=> tmp=ans*10
q.push(tmp);
q.push(tmp+1);
}
pr(ans);
}
} 
京公网安备 11010502036488号