明显的快搜 但是要用同余定理降低复杂度
考虑剪枝 当这个余数已经出现的时候,那么再向后加数字也不可能是这个模数的倍数
本来想用优先队列加速一下,发现这个最小的值因为余数和字符串的关系根本就不是最小的QWQ
#include <bits/stdc++.h>
using namespace std;
const int MAXN = (int)1e6+10;
bool vis[MAXN];
int n;
struct node {
string s; int x;
node(string _s,int _x):s(_s),x(_x){}
bool operator <(const node &r)const {
return x > r.x;
}
};
queue<node> que;
void bfs() {
que.push(node("1",1%n));
vis[1%n] = true;
while(!que.empty()) {
node tmp = que.front();
que.pop();
if(tmp.x == 0) {
cout << tmp.s << endl;
return ;
}
int x;
x = tmp.x*10;
if(!vis[x%n]) {
que.push(node(tmp.s+"0",x%n));
vis[x%n] = true;
}
if(!vis[x%n+1]) {
que.push(node(tmp.s+"1",(x+1)%n));
vis[x%n+1] = true;
}
}
}
int main() {
cin >> n;
bfs();
return 0;
}