超级密码(dfs)
超级密码233
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3406 Accepted Submission(s):
1080
密码是一个C进制的数,并且只能由给定的M个数字构成,同时密码是一个给定十进制整数N(0<=N<=5000)的正整数倍(如果存在多个满足条件的数,那么最小的那个就是密码),如果这样的密码存在,那么当你输入它以后门将打开,如果不存在这样的密码......那就把门炸了吧.
注意:由于宝藏的历史久远,当时的系统最多只能保存500位密码.因此如果得到的密码长度大于500也不能用来开启房门,这种情况也被认为密码不存在.
注意:在给出的M个数字中,如果存在超过10的数,我们约定用A来表示10,B来表示11,C来表示12,D来表示13,E来表示14,F来表示15.我保证输入数据都是合法的.
please".
注意:构成密码的数字不一定全部都要用上;密码有可能非常长,不要试图用一个整型变量来保存密码;我保证密码最高位不为0(除非密码本身就是0).
22 10
3
7 0 1
2 10
1
1
25 16
3
A B C
Hint
Huge input, scanf is recommended.
r= k (mod c)則 (k*p+a)(mod c)=(r*p+a)(mod c)
如果某个数值序列的余数为r.....如果某个余数已经被构造过...那么后面得到的一定是与原来构造过的余数序列相同的序列 而由BFS的性质.最短的一定是最先被构造出来的..所以.....先到先得!(每一位使用什么数字都是不变的哦.....就是在同一个数值集合内...). 如果看不懂 看下面的
例如 如果 k1%c==k1k2%c 则 k1k3%c==k1k2k3%c
再特殊一点的 比如 3%4==3 27%4==3 则 31%4==271%4 ,32%4==272%4 ,33%4==273%4...............
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
bool xx[];
int m,n,x;
struct haha
{
int len;
int num[];
}q,temp;
bool vis[];
int judge(struct haha &p)//计算其除以n的余数
{
int len=p.len,tmp=;
for(int i=;i<=len;i++)
{
tmp=(tmp*x+p.num[i])%n;
}
return tmp;
}
void print(struct haha &p)//找到后输出
{
for(int i=;i<=q.len;i++)
{
printf("%X",q.num[i]);//输出大写的用X
}
printf("\n");
return ;
}
void BFS()
{
int i;
memset(vis,,sizeof(vis));
queue<struct haha>que;
for(i=;i<;i++)
{
if(xx[i]==true)
{
q.len=;
q.num[]=i;
int k=judge(q);
if(k==)
{
print(q);
return ;
}
else vis[k]=;
que.push(q);
}
}
while(!que.empty())
{
temp=que.front();
que.pop();
for(i=;i<;i++)
{
if(xx[i]==false) continue;
q=temp;
q.len+=;
q.num[q.len]=i;
int k=judge(q);
if(k!=)
{
if(!vis[k]&&q.len<=)
{
vis[k]=true;
que.push(q);
}
}
else
{
print(q);
return ;
} }
}
printf("give me the bomb please\n");
}
int main()
{
int cas,i;
scanf("%d",&cas);
while(cas--)
{
memset(xx,,sizeof(xx));
scanf("%d %d %d",&n,&x,&m);
for(i=;i<m;i++)
{
int k;
scanf("%x",&k);//用%x输入 省去了转化为数字的繁琐
xx[k]=;
}
if(n==)
{
if(xx[]==true)
printf("0\n");
else printf("give me the bomb please\n");
continue;
}
BFS(); }
return ;
}
超级密码(dfs)的更多相关文章
- hdu.1226.超级密码(bfs)
超级密码 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 中兴F412光猫超级密码破解、破解用户限制、关闭远程控制、恢复路由器拨号
不少家庭都改了光纤入户,那肯定少不了光猫的吧.今天以中兴F412光猫为例介绍下此型号光猫超级密码的破解方法.一.F412超级密码破解方法1.运行CMD,输入telnet 192.168.1.1: 2. ...
- 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 ...
- 电信光纤猫 f412超级密码
中兴F412光猫超级密码破解.破解用户限制.关闭远程控制.恢复路由器拨号 http://bbs.mydigit.cn/simple/?t1021161.html 不少家庭都改了光纤入户,那肯定少不了光 ...
- 华为HG8245 电信 光猫破解获取超级密码
这款光猫是 猫+无线路由器一体的 默认没有打开路由功能. 光猫背后的用户名和密码是有限制的没人什么用处,如果要打开路由功能就得要有 超级用户名和密码 不然就算收的到无线连的起也上不了网 .这时就需要 ...
- 超级密码 hdu1226 bfs
超级密码 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- hdu 1226 超级密码
超级密码 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem D ...
- HDU 1226 超级密码(数学 bfs)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1226 超级密码 Time Limit: 20000/10000 MS (Java/Others) ...
随机推荐
- 帮小黎解决问题C++巩固获得数字每个位置上的数
现在有一个数字 a= 12345; 想要取得这个数字上的没一个数字 使用 除法 +模除 的方法可以获得 原理:除(/)得到的是商 模除(%)的到的是余数 采用这种方式,先将要求的数的某一位 ...
- shell的数组操作
#/bin/bash #创建数组方式1 arr[]=hello arr[]=world #创建数组方式2 arr=(hello world) #创建数组方式3 arr=([]=hello []=wor ...
- The Contiki build system 编译系统
The Contiki build system======================== The Contiki build system is designed to make it eas ...
- Qt自定义带游标的slider,在滑块正上方显示当前值(非常有意思,继承QSlider之后增加一个QLabel,然后不断移动它)
首先自定义QSlider的子类MyCustomSlider,如下所示. mycustomslider.h #ifndef MYCUSTOMSLIDER_H #define MYCUSTOMSLIDER ...
- hmac_sha1 签名
use URI::Escape qw(uri_unescape); use MIME::Base64; use Digest::HMAC_SHA1; $str=Digest::HMAC_SHA1::h ...
- c++ 04
一.this指针 1. 2.应用场景 1) 2)将this指针作为函数的参数.一个对象可以通知另一个对象有关自身的地址. 教师 提问|^ V|答案 学生 交叉类问题: class ...
- CString 的一些事
MFC Visual Studio 2008 CString 的 Format 中不能这样存在str.Format(_T("Cool(\%)")); 或者 str.Format( ...
- Find Successor & Predecessor in BST
First, we use recursive way. Successor public class Solution { public TreeNode inorderSuccessor(Tree ...
- Android窗口管理服务WindowManagerService切换Activity窗口(App Transition)的过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8596449 在Android系统中,同一时刻只 ...
- Eclipse安装Vim——viPlugin插件
1.下载viPlugin: http://www.viplugin.com/files/viPlugin_2.14.0.zip 2.安装 解压后有两个文件夹: features 和 plugins 把 ...