HDU 4474 Yet Another Multiple Problem【2012成都市regional K题】
HDU 4474 Yet Another Multiple Problem【2012成都regional K题】
不怪任何人,就当什么都没有发生吧,虽然结果悲剧
与之前网络赛那题相似(似乎更简单一点)
BFS,路径u->v且v=10*u+i,第一次搜到即为最优值,
就是一个裸的BFS,不是什么DP、数位DP……那些什么乱乱的东西,更不是暴力枚举倍数http://acm.hdu.edu.cn/showproblem.php?pid=4474
#include<cstdio> #include<cstring> int a[10],n,m,bg,ed; int q[11111],pre[11111],val[11111]; void pnt(int u) { if(pre[u]) pnt(pre[u]); putchar(val[u]+48); } void solve() { bg=ed=0; for(int i=1;i<10;i++) if(i%n==0){printf("%d\n",i);return;} for(int i=1;i<10;i++) if(!a[i]) q[ed++]=i%n,pre[i%n]=0,val[i%n]=i; while(bg<ed) { int u=q[bg++]; for(int i=0;i<10;i++) if(!a[i]) { int v=(u*10+i)%n; if(v==0) { pnt(u); printf("%d\n",i); return; } if(-1==pre[v]) q[ed++]=v,pre[v]=u,val[v]=i; } } puts("-1"); } int main() { freopen("in.txt","r",stdin); int cas=1; while(scanf("%d",&n)!=EOF) { memset(pre,-1,sizeof(pre)); memset(a,0,sizeof(a)); scanf("%d",&m); for(int x,i=0;i<m;i++) { scanf("%d",&x); a[x]=1; } printf("Case %d: ",cas++); solve(); } return 0; }http://acm.hdu.edu.cn/showproblem.php?pid=4294
http://blog.csdn.net/wxfwxf328/article/details/8037588#t5
- 1楼hundundm昨天 18:45
- 哇,这写法比我的好多了Orz,学习学习nn话说似乎有点小bugn5 1n5n这样的话,你的程序会输出5,答案应该是10,特判那里有点问题。