洛谷1602 Sramoc问题
刚看到这道题的时候感觉像spfa。
然后发现其实bfs就可以做了。
//Serene #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; const int maxn=1000+10; int k,m,from[maxn],d[maxn]; int zz[maxn]; bool vis[maxn]; void bfs() { int s=1,t=0,x,y; for(int i=1;i<=k&&!vis[0];++i) if(!vis[i%m]){ d[i%m]=i%m,zz[++t]=i%m,vis[i%m]=1; } while(s<=t&&!vis[0]) { x=zz[s++];y=x*10%m; for(int i=0;i<=k&&!vis[0];++i) { y=(x*10%m+i)%m; if(vis[y]) continue; vis[y]=1; from[y]=x; d[y]=i; zz[++t]=y; } } t=0;zz[++t]=d[0]; for(int i=from[0];i;i=from[i]) zz[++t]=d[i]; while(t) printf("%d",zz[t--]); } int main() { scanf("%d%d",&k,&m);k--; bfs(); return 0; }
弱者就是会被欺负呀