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 ...
随机推荐
- django中migration文件是干啥的
昨天很蠢的问leader git push的时候会不会把本地的数据库文件上传上去,意思是django中那些migration文件修改之后会不会上传. 然后得知不会,因为所有的数据库都存在本机的mysq ...
- 使用dom4j解析XML文档
dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不 ...
- Linux系统被入侵后处理经历
服务器托管在外地机房. 突然,频繁收到一组服务器ping监控不可达邮件,赶紧登陆zabbix监控系统查看流量状况. 可见流量已经达到了800M左右,肯定不正常,马上尝试SSH登陆系统,不幸的事,这种情 ...
- [COCI2012Final]Pro1
校内OJ上的题. 数据范围非常小,用暴搜就可以,加点剪枝阶乘级别的复杂度竟然可以跑得比$O(N^4)$的算法还要快QAQ. 我用的是Floyd,参考了别人的代码.大概就是先跑个Floyd把点点之间路径 ...
- angularjs $q、$http 处理多个异步请求
angularjs $q.$http 处理多个异步请求 在实际业务中经常需要等待几个请求完成后再进行下一步操作.但angularjs中$http不支持同步的请求. 解决方法一: $http.get(' ...
- hibernate----(Hql)另一种查询---利用Criteria类
package com.etc.test; import java.util.List; import org.hibernate.Criteria;import org.hibernate.Sess ...
- CentOS6.5 安装Sphinx 配置MySQL数据源
前提安装完mysql,并创建测试表和数据 DROP TABLE IF EXISTS `documents`; CREATE TABLE IF NOT EXISTS `documents` ( `i ...
- VM安装linux
看图简单流程即可.注意磁盘空间至少30G,实用oracle数据库时需要更大,可以后期增加. 静待安装完成即可.一定记得创建的用户名及密码,及root用户的密码.
- Java 组播
MulticastSocketServer.java package cn.edu.buaa.multicast; import java.io.IOException; import java.ne ...
- [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify uniq
angularjs 使用ng-repeat报错 <div ng-init="words = ['高校','高校','高校']" ng-repeat="word in ...