hdu 1664 Different Digits
来源:互联网 发布:js怎么给隐藏域赋值 编辑:程序博客网 时间:2024/06/04 18:12
参考 http://blog.csdn.net/u010228612/article/details/9715555#comments ....狂拽酷炫YXJ~~~~
ps:一个数论中的结论:对于任意的整数n,必然存在一个由不多于两个的数来组成的一个倍数。因为a,aa,aaa……取n+1个,则必有两个模n余数相同,相减即得n的倍数m。而m只由a、0组成。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include <string>using namespace std;int n;bool vis[70000];string ans,tans,ttans;struct node{ int dig; int pa; int mod; int deep;}Q[70000];int X[5];int tag;int head,tail;void print(int t){ if(t==-1) { return; } else { print(Q[t].pa); tans+=Q[t].dig+'0'; }}bool bfs(int lit){ node w,e; memset(vis,false,sizeof(vis)); head=tail=0; for(int i=1;i<=lit;i++) { if(X[i]==0)continue; e.dig=X[i]; e.mod=X[i]%n; e.pa=-1; vis[e.mod]=true; e.deep=1; Q[tail++]=e; } while(head<tail) { w=Q[head]; if(w.mod==0) { print(head); return true; } if(w.deep>ans.length() && ans!="zz")//剪枝啦啦啦 { return false; } for(int i=1;i<=lit;i++) { e=w; e.mod=(e.mod*10+X[i])%n; if(!vis[e.mod]) { e.dig=X[i]; e.pa=head; e.deep++; vis[e.mod]=true; ttans+=e.dig+'0'; Q[tail++]=e; } } head++; } return false;}int main(){ while(scanf("%d",&n)!=EOF && n) { ans="zz"; for(int i=1;i<=9;i++) { X[1]=i; tans=""; if(bfs(1)) { if(ans=="zz")ans=tans; if(tans<ans&&tans.length()==ans.length() || tans.length()<ans.length()) ans=tans; } } if(ans!="zz") { cout<<ans<<endl; continue; } for(int i=0;i<9;i++) { X[1]=i; for(int j=i+1;j<=9;j++) { X[2]=j; tans=""; if(bfs(2)) { if(ans=="zz")ans=tans; if(tans<ans&&tans.length()==ans.length() || tans.length()<ans.length()) ans=tans; } } } cout<<ans<<endl; } return 0;}
- hdu 1664 Different Digits
- HDU 1664 Different Digits
- HDU 1664 Different Digits
- hdu Different Digits 1664
- hdu 1664 Different Digits
- HDU-1664-Different Digits(BFS)
- 【搜索】 HDU 1664 Different Digits
- HDU 1664 POJ 2283 Different Digits
- 【POJ 2283】 【HDU 1664】 Different Digits
- 【hdu】1664 different digits【搜索+字符串处理】
- HDOJ 1664 Different digits
- hdu 1664 Different Digits (bfs+取余判重+数论知识)
- BFS+余数判重+数论 hdu-1664-Different Digits
- hdu 1664 Different Digits, spoj 3929 , 同余,bfs
- hdu 1664 Different Digits(bfs+余数判重)
- [HDU 1664] Different Digits DFS+鸽巢原理
- hdu 1664 Different Digits 数位BFS(怎么都是这些题……
- HDU 1664 Different Digits (数论 -- 鸽笼原理 + BFS搜索 + 余数判重)
- 2013-08-05(周一)
- poj1753
- 用div做页面的时候遇到的问题
- Python学习笔记三--socket
- 【java系列之原生数据类型】
- hdu 1664 Different Digits
- 关于在MFC中加载PNG图片
- hdu1086计算n条线段的交点个数
- CopyU!的内核引擎升级到1.2.288.104
- 小知识点集合
- 九度笔记之 1528:最长回文子串 用manacher算法
- Oracle 只读表空间 说明
- eclipse 阅读代码高效快捷键
- 银联+移动+三星PK微信、余额宝