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 ...
随机推荐
- Scala可变长度参数
可变长度参数 Scala 允许你指明函数的最后一个参数可以是重复的.这可以允许客户向函数传入可变长度参数列表.想要标注一个重复参数,在参数的类型之后放一个星号.例如: scala> def ec ...
- Deep Learning in NLP (一)词向量和语言模型
原文转载:http://licstar.net/archives/328 Deep Learning 算法已经在图像和音频领域取得了惊人的成果,但是在 NLP 领域中尚未见到如此激动人心的结果.关于这 ...
- hdu 2037 - 今年暑假不AC(区间调度问题)
题意:区间调度问题 解法:应用贪心算法,贪心的规则: 在可选的节目中,选取结束时间早的节目. 1: #include<stdlib.h> 2: #include<string.h&g ...
- python的正则表达式 re-------可以在字符串前加上 r 这个前缀来避免部分疑惑,因为 r 开头的python字符串是 raw 字符串,所以里面的所有字符都不会被转义
正则表达式使用反斜杆(\)来转义特殊字符,使其可以匹配字符本身,而不是指定其他特殊的含义.这可能会和python字面意义上的字符串转义相冲突,这也许有些令人费解.比如,要匹配一个反斜杆本身,你也许要用 ...
- vmware下linux系统的安装过程
虚拟机VMware下CentOS6.6安装教程图文详解 [日期:2016-05-24] 来源:Linux社区 作者:Sungeek [字体:大 中 小] 分享下,虚拟机VMware下CentOS ...
- 第3章 基本概念(第一部分:Js语法)
本章就JavaScript常用功能而言阐述ECMAScript“伪语言”所描述的概念. 一. 语法 1.大小写规则 js语言本身对大小写不敏感,但是一切变量.函数.操作符都对大小写敏感. 2.注释格式 ...
- VBO, VAO, Generic Vertex Attribute
VBO - 用于存储顶点数据的Buffer Object. VAO - 用于组织VBO的对象. Generic Vertex Attribute - 通用顶点属性. For example, the ...
- jquery 停止animate动画,并且回复最初状态
// 热门推荐悬浮效果 $("#recom_con li img").mouseenter(function(){ $(this).stop(true, true); $w = p ...
- 扩展服务 修改新增Service的默认主题
问题描述:想要在F:\PHPnow-1.5.6\htdocs\yt\Yourphp\Tpl\ 目录下新增一个Service\Default(A) 和Service\new(B) 两个主题 ...
- live555在Raspberry Pi上的点播/直播
1.live555在Raspberry Pi上的点播 live555MediaServer这个实例是个简单的服务器,支持多媒体点播,直接在Raspberry Pi上编译运行,或者通过交叉编译出ARM核 ...