题目链接
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); } }