hdu.1226.超级密码(bfs)
超级密码
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2927 Accepted Submission(s): 939
注意:由于宝藏的历史久远,当时的系统最多只能保存500位密码.因此如果得到的密码长度大于500也不能用来开启房门,这种情况也被认为密码不存在.
注意:在给出的M个数字中,如果存在超过10的数,我们约定用A来表示10,B来表示11,C来表示12,D来表示13,E来表示14,F来表示15.我保证输入数据都是合法的.
注意:构成密码的数字不一定全部都要用上;密码有可能非常长,不要试图用一个整型变量来保存密码;我保证密码最高位不为0(除非密码本身就是0).
22 10
3
7 0 1
2 10
1
1
25 16
3
A B C
give me the bomb please
CCB
Hint
Huge input, scanf is recommended.
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
int T , mod , c , n ;
char a[ + ] ;
bool vis[ + ] ;
int num[] ;
struct node
{
int step , ret ;
node () {}
node (int step , int ret) : step (step) , ret (ret) {}
};
struct link
{
int v , nxt ;
}e[ + ];
void echo (int an)
{
int k = ;
for (int i = an ; ~ i ; i = e[i].nxt) {
if (e[i].v < ) a[k ++] = '' + e[i].v ;
else if (e[i].v >= ) a[k ++] = e[i].v - + 'A' ;
}
// printf ("\nk=%d\n" , k) ;
for (int i = k - ; i >= ; i --) {
printf ("%c" , a[i]) ;
}
printf ("\n") ;
} bool bfs ()
{
int E = - ;
std::queue<node> q ;
while (!q.empty ()) q.pop () ;
memset (vis , , sizeof(vis)) ;
node ans , tmp ;
int cnt = E + ;
for (int i = ; i < n ; i ++) {
if (num[i] != && !vis[num[i]%mod]) {
ans = node ( , num[i]%mod) ;
e[cnt].v = num[i] ; e[cnt].nxt = E ; cnt ++ ;
vis[num[i]%mod] ;
if (num[i]%mod == ) {echo (cnt - ) ; return true ;}
q.push (ans) ;
}
}
// for (int i = 0 ; i < n ; i++) printf ("%d " , num[i]) ; printf ("\n") ;
while (!q.empty ()) {
ans = q.front () ; q.pop () ;
E ++ ;
// printf ("step=%d , ret=%d\n" , ans.step , ans.ret) ;
for (int i = ; i < n ; i++) {
tmp.ret = (ans.ret * c + num[i]) % mod ;
tmp.step = ans.step + ;
// printf ("+%d=(%d)\n" , num[i],tmp.ret) ;
if (tmp.step > ) continue ;
if (vis[tmp.ret]) continue ;
e[cnt].v = num[i] ; e[cnt].nxt = E ; cnt ++ ;
// printf ("(%d)ans.ret=%d\n" , num[i] , ans.ret) ;
if (tmp.ret == ) {echo (cnt - ) ; return true ;}
vis[tmp.ret] = ;
q.push (tmp) ;
}
}
return false ;
} int main ()
{
//freopen ("a.txt" , "r" , stdin ) ;
scanf ("%d" , &T) ;
while (T--) {
scanf ("%d%d%d" , &mod , &c , &n) ;
// printf ("mod=%d,c=%d,n=%d\n" , mod , c , n ) ;
// printf ("hehe :%s\n" , a ) ;
for (int i = ; i < n; i++){
scanf("%s", a);
if (a[] <= '' && a[] >= '') num[i] = a[] - '';
else if (a[] <= 'F' && a[] >= 'A') num[i] = a[] - 'A' + ;
}
std::sort (num , num + n) ;
if (mod == ) {
if (num[] == ) puts ("") ;
else puts ("give me the bomb please") ;
continue ;
}
if ( !bfs () ) puts ("give me the bomb please") ;
}
return ;
}
bfs能用来生成数,给赞啊。规避了大数的做法也很6.
hdu.1226.超级密码(bfs)的更多相关文章
- HDU 1226 超级密码(BFS) (还需研究)
Time Limit:10000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Desc ...
- HDU 1226 超级密码(数学 bfs)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1226 超级密码 Time Limit: 20000/10000 MS (Java/Others) ...
- hdu 1226 超级密码
超级密码 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem D ...
- hdu 1226 超级密码(bfs+余数判重)
题意:略过 分析:用m个数字组成一个能够被n整除的c进制数的最小值,实际上本题的关键就在于这个最小值上. 首先确定我们的思路是从小到大寻找.先查看一位数,即查看着m个数字是否能被n整除:若不能,就查 ...
- HDOJ 1226 超级密码(bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1226 思路分析:题目要求寻找一串长度不大于500的C进制的密码,且该密码需要为十进制数N的整数倍. & ...
- HDU 1226 超级密码 (搜素)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1226 题意简单,本来是一道很简单的搜素题目. 但是有两个bug: 1.M个整数可能有重复的. 2.N可 ...
- hdu1226超级密码 bfs
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1226/ 题目大意是:寻找一个五百位之内的C进制密码,该密码是N的正整数倍,而且只能用给定的数构成密码,求这样的密 ...
- HDOJ 1226 超级密码
超级密码 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- 超级密码(bfs)
超级密码 Time Limit : 20000/10000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
随机推荐
- Mac下同时安装多个版本的JDK
JDK8 GA之后,小伙伴们喜大普奔,纷纷跃跃欲试,想体验一下Java8的Lambda等新特性,可是目前Java企业级应用的主打版本还是JDK6, JDK7.因此,我需要在我的电脑上同时有JDK8,J ...
- mysql user administration
1. 为数据库databasename创建web用户 1.1 创建数据库 mysql> create database databasename; 1.2 为数据库创建用户 mysql> ...
- 关键字static(1)
static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念.被static修 ...
- ionic的scroll的使用出现的问题
今天再写ionic的时候发现了一个问题,在使用ui-view的时候引用ion-scroll指令的时候初次加载的时候能能实现拖拽滚动,只能实现滚动鼠标滚轴滚动,然后各种调试,各种比较,终于发现原来是路由 ...
- web项目中的跨域问题解决方法
一种是JSONP 一种是 CORS. 在客户端Javascript调用服务端接口的时候,如果需要支持跨域的话,需要服务端支持. JSONP的方式就是服务端对返回的值进行回调函数包装,他的优点是支持众多 ...
- IIS Express 外部访问
http://blog.csdn.net/zhangjk1993/article/details/36671105
- Linux 的cp命令详解
功能: 复制文件或目录说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中.若同时指定多个文件或目录, ...
- Socket通信的理解
1.Socket(套接字) 是支持TCP/IP通信的基本操作单元.包含通信的五种必须信息:通信使用的协议,本机IP和端口,远程IP和端口. 2. 1.TCP连接 手机能够使用联网功能是因为手机底层实现 ...
- C#验证子网掩码的正确性
1. IP合法关于IP地址的合法性验证很简单,方法也很多,比如字符串分解.正则表达式等. 2. 子网掩码是否合法简单来讲,子网掩码就类似这样一串数字,前面一段是连续的1, 类似 ...
- 《深入理解bootstrap》读书笔记:第一章 入门准备
一.bootstrap框架简介 Bootstrap是最流行的前端开发框架. 什么是框架:开发过程的半成品. bootstrap具有以下重要特性: (1)完整的CSS样式插件 (2)丰富的预定义样式表 ...