题目链接

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);
    }
}