hdu_1226超级密码(BFS)
超级密码
Problem Description
密码是一个C进制的数,并且只能由给定的M个数字构成,同时密码是一个给定十进制整数N(0<=N<=5000)的正整数倍(如果存在多个满足条件的数,那么最小的那个就是密码),如果这样的密码存在,那么当你输入它以后门将打开,如果不存在这样的密码......那就把门炸了吧.
注意:由于宝藏的历史久远,当时的系统最多只能保存500位密码.因此如果得到的密码长度大于500也不能用来开启房门,这种情况也被认为密码
Input
注意:在给出的M个数字中,如果存在超过10的数,我们约定用A来表示10,B来表示11,C来表示12,D来表示13,E来表示14,F来表示15.我保证输入数据都是合法的.
Output
注意:构成密码的数字不一定全部都要用上;密码有可能非常长,不要试图用一个整型变量来保存密码;我保证密码最高位不为0(除非密码本身就是0).
Sample Input
Sample Output
Hint
Huge input, scanf is recommended.
Author
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; struct Node
{
int mod; //余
int digit; //该位的值
int pre; //前一个是
int step; //第几位了
}Q[],init={,,-,};//初始状态 int n,c,m;
int num[]; // 16 个数
int use[]; //余 ,标记 void print(int p)
{
if (Q[p].pre==-)
return;
else
print(Q[p].pre);
if (Q[p].digit<)
printf("%c",Q[p].digit+'');
else
printf("%c",Q[p].digit-+'A');
} void bfs()
{
memset(use,,sizeof(use));
int head=,tail=;
Q[]=init;
int ok=;
while (head!=tail)
{
if (ok) break;
Node x =Q[head];
for (int i=;i<m;i++)
{
int yu = (x.mod*c+num[i])%n;
if (use[yu]||(x.pre==-&&num[i]==)||x.step>=) continue;
Q[tail].mod=yu;
Q[tail].digit=num[i];
Q[tail].pre=head;
Q[tail].step=x.step+;
use[yu]=;
if (yu==)
{
print(tail);
ok=;
break;
}
tail++;
}
head++;
}
if (ok)
printf("\n");
else
printf("give me the bomb please\n");
} int main()
{
int T;
scanf("%d",&T);
while (T--)
{
scanf("%d%d%d",&n,&c,&m);
for (int i=;i<m;i++)
{
char tt[];
scanf("%s",tt);
if (tt[]>=''&&tt[]<='')
num[i]=tt[]-'';
else
num[i]=tt[]-'A'+;
}
sort(num,num+m);
if (n==)
{
if (num[]==)
printf("0\n");
else
printf("give me the bomb please\n");
}
else
bfs();
}
return ;
}
hdu_1226超级密码(BFS)的更多相关文章
- hdu.1226.超级密码(bfs)
超级密码 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 超级密码(bfs)
超级密码 Time Limit : 20000/10000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- 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) ...
随机推荐
- 最新IP地址数据库Dat格式-高性能高并发版(2019年3月)
最新IP地址数据库->Dat 二进制文件 高性能高并发-qqzeng-ip.dat 格式 全球IP数据库-20190301-Dat 版 国内IP数据库-20190 ...
- python中ascii码和字符的转换
将ASCII字符转换为对应的数值即‘a’-->65,使用ord函数,ord('a') 反正,使用chr函数,将数值转换为对应的ASCII字符,chr(65)
- IO流(一)File类
1.File类:表示文件和目录路径的抽象的表示形式,可以实现文件的创建,删除,重命名等,是唯一与文件本 有关的操作类. 2.File类的API定义:public class File extends ...
- Codeforces Round #262 (Div. 2)解题报告
详见:http://robotcator.logdown.com/posts/221514-codeforces-round-262-div-2 1:A. Vasya and Socks http ...
- Navicat Premium 连接 Oracle 数据库
Navicat Premium 是一个可多重连接的数据库管理工具,它可让你以单一程序同時连接到 MySQL.SQLite.Oracle 及 PostgreSQL 数据库,让管理不同类型的数据库更加方便 ...
- h5+ 管理设备信息
Device模块管理设备信息,用于获取手机设备的相关信息,如IMEI.IMSI.型号.厂商等.通过plus.device获取设备信息管理对象. 1.属性 1.1.imei: 设备的国际移动设备身份码, ...
- Oracle 11g 递归+ exists运行计划的改变
有一个递归查询在10g上执行非常快,但在11g上执行不出来. SQL> select * from v$version; BANNER ----------------------------- ...
- C. Glass Carving (CF Round #296 (Div. 2) STL--set的运用 && 并查集方法)
C. Glass Carving time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- HDU4647:Another Graph Game(贪心)
Problem Description Alice and Bob are playing a game on an undirected graph with n (n is even) nodes ...
- excel表格快捷键
CTRL+A 全选 CTRL+B 加粗 CTRL+C 复制 CTRL+D 下拉(复制上一个单元格的格式和内容) CTRL+G 定位 CTRL+F ...