由题
余数为零 则该串必定为1开头的01串
由BFS特性可得首解最优
因此队头1
向后添加0 或 1
进行取模搜索
当前取模值单一后推运算即可
否则展开规律相同 无意义
#pragma GCC optimize(2)
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <ctime>
#include <vector>
#include <fstream>
#include <list>
#include <iomanip>
#include <numeric>
using namespace std;
typedef unsigned long long ll;
const int MAXN = 1e6 + 10;
ll exz[MAXN] = {0};
/*map <int, bool> exz;*/
ll n;
struct bfsnode
{
string ss;
ll num;
bfsnode(string ts, ll x)
{
ss = ts;
num = x;
}
};
void searh()
{
bfsnode a("1", 1 % n);
queue <bfsnode> Q;
Q.push(a);
while(!Q.empty())
{
bfsnode b = Q.front();
Q.pop();
if(b.num == 0)
{
cout<<b.ss<<endl;
return ;
}
else
{
bfsnode t(b.ss + "0", b.num * 10 % n);
if(exz[b.num] == 0)
{
exz[b.num] = 1;
Q.push(t);
}
bfsnode k(b.ss + "1", (b.num * 10 + 1) % n);
if(exz[k.num] == 0)
{
exz[b.num] = 1;
Q.push(k);
}
}
}
}
int main()
{
//ios::sync_with_stdio(false);
//cin.tie(0); cout.tie(0);
cin>>n;
searh();
return 0;
}