超级密码(bfs)
超级密码
Time Limit : 20000/10000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 4 Accepted Submission(s) : 0
密码是一个C进制的数,并且只能由给定的M个数字构成,同时密码是一个给定十进制整数N(0<=N<=5000)的正整数倍(如果存在多个满足条件的数,那么最小的那个就是密码),如果这样的密码存在,那么当你输入它以后门将打开,如果不存在这样的密码......那就把门炸了吧.
注意:由于宝藏的历史久远,当时的系统最多只能保存500位密码.因此如果得到的密码长度大于500也不能用来开启房门,这种情况也被认为密码不存在.
#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
const int MAXN=;
int num[];
struct Node{
int s[MAXN];
int len;
};
int M,C,N;
int vis[];
int mod(Node a){
int x=;
for(int i=;i<a.len;i++){
x=(x*C+a.s[i])%N;
}
return x;
}
void print_ans(Node a){
for(int i=;i<a.len;i++){
if(a.s[i]>=&&a.s[i]<=)printf("%c",a.s[i]+'');
else printf("%c",a.s[i]-+'A');
}
puts("");
}
void bfs(){
memset(vis,,sizeof(vis));
queue<Node>dl;
Node a;
a.len=;
int md;
for(int i=;i<M;i++){
a.s[]=num[i];
md=mod(a);
//printf("%d ",md);
if(vis[md]||num[i]==)continue;
if(md==&&num[i]){
printf("%d\n",num[i]);
return;
}
// printf("%d ",md);
vis[md]=;
dl.push(a);
}
while(!dl.empty()){
a=dl.front();
dl.pop();
for(int i=;i<M;i++){
if(a.len==&&a.s[]==)continue;
a.s[a.len]=num[i];
a.len++;
//puts("**");
md=mod(a);
// printf("%d ",md);
if(vis[md]||a.len>){
a.len--;//这里少了这个错的啊。。。。。无奈。。。。。
continue;
}
// print_ans(a);
if(md==){ print_ans(a);
return;
}
vis[md]=;
dl.push(a);
a.len--;
}
}
puts("give me the bomb please");
}
int main(){
int T;
scanf("%d",&T);
char s[];
while(T--){
scanf("%d%d%d",&N,&C,&M);
for(int i=;i<M;i++){
scanf("%s",s);
if(s[]>=''&&s[]<='')num[i]=s[]-'';
else num[i]=s[]-'A'+;
// printf("%d ",num[i]);
}
sort(num,num+M);
if(N)bfs();
else if(!num[])puts("");
else puts("give me the bomb please");
}
return ;
}
#include<stdio.h>
#include<string>
#include<queue>
#include<string.h>
#include<algorithm>
#define mem(a) memset(a,0,sizeof(a))
using namespace std;
const int MAXN=1e4+;
int cmp(char a,char b){
/*if(a<b)return 1;
else return 0;*/
return a<b;
}
int vis[MAXN],pre[MAXN];
char num[];
int nu[];
char al[MAXN];
int n,m,C;
void print_ans(){
int r=;
string ans;
while(ans.empty()||r!=){
ans+=al[r];
r=pre[r];
}
reverse(ans.begin(),ans.end());
puts(ans.c_str());
}
void bfs(){
queue<int>dl;
dl.push();
while(!dl.empty()){
int f1,f2;
f1=dl.front();//**
dl.pop();
for(int i=;i<m;i++){
if(nu[i]==&&f1==)continue;
f2=(f1*C+nu[i])%n;
if(vis[f2])continue;
pre[f2]=f1;
al[f2]=num[i];
if(f2==){
//printf("%d %d\n",f1,f1*C+nu[i]);
print_ans();
return;
}
vis[f2]=;
dl.push(f2);
}
}
puts("give me the bomb please");
}
int main(){
int T;
scanf("%d",&T);
while(T--){
mem(vis);mem(pre);mem(al);
char x[];
scanf("%d%d%d",&n,&C,&m);
for(int i=;i<m;i++){
scanf("%s",x);
num[i]=x[];
//printf("%c ",num[i]);
}
sort(num,num+m);
int o=;
for(int i=;i<m;i++){
if(num[i]>='A'&&num[i]<='Z')nu[i]=+num[i]-'A';
else nu[i]=num[i]-'';
if(num[i]=='')o=;
//printf("%c %d ",num[i],nu[i]);
}
if(n!=)bfs();
else if(o)puts("");
else puts("give me the bomb please");
}
return ;
}
超级密码(bfs)的更多相关文章
- hdu.1226.超级密码(bfs)
超级密码 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- hdu_1226超级密码(BFS)
超级密码 Problem Description Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息:密码是 ...
- HDOJ 1226 超级密码(bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1226 思路分析:题目要求寻找一串长度不大于500的C进制的密码,且该密码需要为十进制数N的整数倍. & ...
- hdu1226 超级密码 (BFS,里面用了大数取余原理)
Problem Description Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息: 密码是一个C进 ...
- HDU1226:超级密码(BFS)
Problem Description Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息: 密码是一个C进 ...
- HDU 1226 超级密码(BFS) (还需研究)
Time Limit:10000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Desc ...
- hdu1226超级密码 bfs
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1226/ 题目大意是:寻找一个五百位之内的C进制密码,该密码是N的正整数倍,而且只能用给定的数构成密码,求这样的密 ...
- 超级密码 hdu1226 bfs
超级密码 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- HDU 1226 超级密码(数学 bfs)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1226 超级密码 Time Limit: 20000/10000 MS (Java/Others) ...
随机推荐
- 搜索服务器xunsearch实现
安装方法: centos 6.6 64位 histroy: 12 cd /srv/ 13 wget http://www.xunsearch.com/download/xunsea ...
- python 日期、时间戳转换
获取当前日期: from datetime import datetime IN:datetime.now() OUT:datetime(2016,10,19,6,51,21,72341) 转化为字符 ...
- linux 关于动态库的知识
问题起缘于编译一个程序时,使用glib2-2.28.8的动态库,而系统自带的是glib2-2.22.5 不想升级系统的glib2库,而使用程序自带库文件的方式加载(类似windows系统,优先加载当前 ...
- 常用Vxworks编程API
vxWorks编程API 一.官方的Program Guide 位于安装目录下:\docs\vxworks\guide\index.html 二.常用的库: #i nclude "taskL ...
- discuz函数dgmdate
function dgmdate($timestamp, $format = 'dt', $timeoffset = '9999', $uformat = '') { global $_G; $for ...
- UberX及以上级别车奖励政策(优步北京第四组)
优步北京第四组: 定义为2015年7月20日至今激活的司机(以优步后台数据显示为准) 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机(全国版最新最详细 ...
- UNIX文化与历史--初学者必看
UNIX文化与历史 UNIX这个名字早已被众多用户所熟知.作为一个操作系统,它以其独特的魅力----即开放性.可移植性.和多用户多任务等特点,不仅赢得了广大用户的喜爱,同时也受到许多计算机厂商的青睐. ...
- 走进小作坊(十一)----移动web实现指南
四.五年前智能手机行业刚刚兴起,差别于之前功能机阉割版的web开发方式,一些学者就開始探索移动web的UI方向了.从PC迁移到移动端的web设计现成可用的原则有,很多其它的则是依据移动端独有特点进行探 ...
- 微信小程序环境搭建
第一步 IDE下载 Win版链接: https://pan.baidu.com/s/1gfAy18n 第二步 破解 最新下载链接: https://pan.baidu.com/s/1gfAy18n ...
- css3 动画(animation)-简单入门
css3之动画(animation) css3中我们可以使用动画,由于取代以前的gif图片,flash动画,以及部分javascript代码(相信有很多同学都用过jquery中的animate方法来做 ...