洛谷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;
}

  

posted @ 2017-10-06 08:20  shixinyi  阅读(198)  评论(0编辑  收藏  举报