HDU 1226 超级密码 (bfs好题)
来源:互联网 发布:珍嗖啦是真是假 知乎 编辑:程序博客网 时间:2024/05/17 09:26
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1226
wa了n发。。之前一直re。找了好久才发现是算c进制化十进制模n时,溢出了。所以得到的余数是负数,然后对数组就访问了非法位置。
代码如下。
#include <iostream>#include <stdio.h>#include <string.h>#include <queue>#include <algorithm>using namespace std;const int maxn=555;struct key{ int kk[maxn];//因为一个数无法存下密码,所以直接存c进制的数 int len;//密码长度};int n,m,c;int ff[22];bool mod[5555];//因为密码是5000的倍数并且要最短,所以只需考虑对5000的余数.并且第一次出现该该余数就是最短的答案.int mm(key s){//返回c进制数转换为十进制数后对n的余数.一直wa在这里 int h=0; for(int i=0;i<s.len;i++) h=(h*c+s.kk[i])%n; return h;}/*原写法int quick(int x){ int ans=1,k=c; while(x){ if(x&1) ans=(ans*k)%n; k=(k*c)%n; x>>=1; } return ans%n;}int mm(key s){ int h=0; for(int i=0;i<s.len;i++) h=(h+((s.kk[i]%n)*quick(i))%n)%n; return h;}*/bool judge(key s){//判断是否全为0 for(int i=s.len-1;i>=0;i--) if(s.kk[i]!=0) return true; return false;}bool bfs(){ key t,ki; queue<key> q; memset(mod,false,sizeof(mod)); for(int i=0;i<m;i++){ t.len=0; t.kk[t.len++]=ff[i]; q.push(t); if(ff[i]==0) continue; int x=mm(t); if(!mod[x]) mod[x]=true; } while(!q.empty()){ t=q.front(); q.pop(); if(mm(t)==0 && judge(t)){ for(int i=0;i<t.len;i++) if(t.kk[i]>=10) printf("%c",t.kk[i]-10+'A'); else printf("%d",t.kk[i]); printf("\n"); return true; } for(int i=0;i<m;i++){ ki=t; ki.kk[ki.len++]=ff[i]; int x=mm(ki); if(ki.len<500&&!mod[x]){//如果长度不超500并且该种余数不出现 q.push(ki); if(!judge(ki)) continue; mod[x]=true; } } } return false;}int main(){ int n_case; scanf("%d",&n_case); while(n_case--){ scanf("%d%d%d",&n,&c,&m); for(int i=0;i<m;i++){ char s[2]; scanf("%s",s); if(s[0]>='0' && s[0]<='9') ff[i]=s[0]-'0'; else ff[i]=s[0]-'A'+10; } sort(ff,ff+m); if(n==0){ if(ff[0]==0) printf("0\n"); else printf("give me the bomb please\n"); } else if(!bfs()) printf("give me the bomb please\n"); } return 0;}
0 0
- HDU 1226 超级密码 (bfs好题)
- hdu 1226 超级密码bfs
- HDU 1226 超级密码(BFS)
- BFS-hdu-1226-超级密码
- hdu 1226 超级密码 bfs
- hdu 1226 超级密码【BFS】
- 【hdu】1226 超级密码【bfs】
- hdu 1226 超级密码 bfs
- Hdu-1226-超级密码 [bfs]
- [HDU 1226]超级密码:BFS
- hdu 1226 超级密码 BFS 挺不错的题啊!
- HDU 1226超级密码(数位BFS)
- hdu 1226 超级密码 bfs+取余判重
- HDU 1226 超级密码(BFS)
- hdu-超级密码(BFS)
- HDU 1266 超级密码 bfs
- hdu 1226 超级密码 (bfs+取余判重 poj 1465加强版 )
- hdu 1226 超级密码(BFS,同余剪枝)
- 初期完工
- SHA1算法
- 教你如何迅速秒杀掉:99%的海量数据处理面试题
- 匆匆那年—2014年终总结
- iOS应用性能调优的25个建议和技巧
- HDU 1226 超级密码 (bfs好题)
- 南邮NOJ偷吃可耻
- MySQL学习(一)数据库安装与配置全程图解
- 整理及优化CSS代码的7个原则
- c++ 与 lua交互
- HDU 1010 Tempter of the Bone
- extjs4.2主题在线制作
- B-树、B+树、B*树的区别
- 安卓学习笔记之Activity的跳转和Activity间的通信