hdu 4474 数位搜索bfs
来源:互联网 发布:讲文明知礼仪例子 编辑:程序博客网 时间:2024/04/30 23:59
点击打开链接
题意:0-9这十个数字里面的若干个数字组合出一个数,使这个数是N的倍数,求最小的这个这样的数,不存在的话输出-1。
如果枚举n的倍数 但是不确定到哪里为止输出-1。
对于 a,b同余n &&b>a 保留a即可
因为a*10+k,b*10+k同余n,a,b同解
所以队列结点保存余数&&由上得:不保存相同余数,BFS时在末尾添加数字生成新的余数,直到余数为0即可
#include <iostream>#include <algorithm>#include <cstring>#include <cstdlib>#include <cstdio>#include <cmath>#include <queue>using namespace std;typedef long long ll;const int N=1e5+20;//对于 a,b同余n &&b>a 保留a即可 //因为a*10+k,b*10+k同余n,a b同解 int n,m;int vis[N];int num[N],pre[N];queue<int> q;//队列存x%n的余数 void Print(int u)//递归打印 { if(pre[u]!=-1)Print(pre[u]);printf("%d",num[u]); }void bfs(){memset(pre,-1,sizeof(pre));memset(num,-1,sizeof(num));for(int i=1;i<=9;i++){if(!vis[i]){int t=i%n;if(t==0){cout<<i;return;}q.push(t);num[t]=i;}}while(!q.empty()){//cout<<x<<endl;int x=q.front();q.pop();for(int i=0;i<10;i++){if(!vis[i]){ int r=(x*10+i)%n;if(num[r]==-1) {pre[r]=x;//前一个结点 num[r]=i;//当前结点最后一位数 q.push(r);}if(r==0){Print(r);return;}} }} cout<<"-1";}int main(){int cas=0;while(cin>>n>>m){memset(vis,0,sizeof(vis));while(!q.empty()){q.pop();}for(int i=1;i<=m;i++){int x;cin>>x;vis[x]=1;}printf("Case %d: ",++cas);bfs();printf("\n");} return 0;}
0 0
- hdu 4474 数位搜索bfs
- hdu 4474 数位BFS
- hdu 4474 数位搜索
- 数位搜索bfs
- hdu 4474 搜索bfs
- 2012 Asia Chengdu Regional Contest hdu 4474(数位bfs)
- HDU-1548(BFS搜索)
- 搜索 BFS HDU
- HDU 1226超级密码(数位BFS)
- 一类数位限制倍数的BFS问题...URAL 1495,POJ 1465,HDU 4474,HDU 1226
- HDU 1429 BFS+状态搜索
- HDU 3220 IDA*搜索 || BFS
- 广度搜索BFS hdu-1312
- hdu 1072 Nightmare 搜索,bfs
- HDU-4460(bfs搜索)
- hdu 5179 数位dp+记忆化搜索
- hdu 5898 数位dp,记忆化搜索
- hdu 4474 Yet Another Multiple Problem 模型转换 BFS搜索
- Dreamweaver CC 2017 正式版昨天已经发布了!看看截图
- 学Servlet略小获(5条)
- PhpStorm下post方法404 Not Found解决办法
- 1622-5 孔富晨 总结《2016年11月3日》 【连续第34天总结】
- AutoCompleteTextView控件的使用
- hdu 4474 数位搜索bfs
- el表达式补充-使用静态方法
- 利用EasyUI 表格显示Discuz数据库中数据
- 经典问题六.(二维的区间dp)棋盘分割 poj 1191
- js面向对象理解二
- 目标文件有什么读书笔记
- Leetcode-166. Fraction to Recurring Decimal
- Unity5.0新特性------unity内部:内存 和 性能(以及Unity5的升级优化)
- Android的三种动画