HDOJ 1226 超级密码
超级密码
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1492 Accepted Submission(s): 445
密码是一个C进制的数,并且只能由给定的M个数字构成,同时密码是一个给定十进制整数N(0<=N<=5000)的正整数倍(如果存在多个满足条件的数,那么最小的那个就是密码),如果这样的密码存在,那么当你输入它以后门将打开,如果不存在这样的密码......那就把门炸了吧.
注意:由于宝藏的历史久远,当时的系统最多只能保存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.
r= k (mod c)則 (k*p+a)(mod c)=(r*p+a)(mod c)
若是某个数&#20540;序列的余数为r.....若是某个余数已经被机关过...那么后面获得的必然是与本来机关过的余数序列雷同的序列 而由BFS的性质.最短的必然是最先被机关出来的..所以.....先到先得!(每一位应用什么数字都是不变的哦.....就是在同一个数&#20540;凑集内...). 若是看不懂 看下面的
例如 若是 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...............
我们请求得的数是n的整数倍 即余数为0 则取余数为0的数中的最小的那个即可
若是请求余数为k的数 只请求出最短的序列 因为n<5000余数最多有5000个 用BFS搜刮 余数第一次呈现的地位就是最短的序列 从中我们找出余数为0对应的最短的序列即可
结论:只要某种余数曾经呈现过.那么这种余数就不须要再呈现..... 直到找到余数为0 或者长度大于500就退出
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue> using namespace std; const int maxn=;
const int maxm=; bool mod[maxm];
char arr[];
int digit[]; struct Node
{
char str[maxn];
int len;
}ans; int N,C,M; int judge(Node X)
{
int sum=;
int len=X.len;
int OK=;
for(int i=;i<len;i++)
{
if(X.str[i]!='')
{
OK=;
break;
}
}
if(!OK) return ;
for(int i=;i<len;i++)
{
if(X.str[i]>=''&&X.str[i]<='')
{
sum=(sum*C+(X.str[i]-''))%N;
}
else if(X.str[i]>='A'&&X.str[i]<='F')
{
sum=(sum*C+(X.str[i]-'A'+))%N;
}
}
sum=sum%N;
return sum;
} queue<Node> q; int bfs()
{ Node x,y; while(!q.empty())
{ y=q.front();
q.pop();
int MOD1; // if(y.len==3&&y.str[0]=='1'&&y.str[1]=='1'&&y.str[0]=='0') cout<<"miaomiaoishere\n"; if((MOD1=judge(y))==)
{
ans=y;
int len=ans.len;
for(int i=;i<len;i++)
printf("%c",ans.str[i]);
putchar();
return ;
}
int zero=;
// if(y.len==1) zero=1;
for(int i=zero;i<;i++)
{
if(digit[i])
{
x=y;
if(i>=&&i<)
x.str[x.len]=i+'';
else if(i>=&&i<=)
x.str[x.len]=i-+'A';
x.len=x.len+;
int MOD2=judge(x);
if(x.len+<=&&mod[MOD2]==false&&MOD2!=)
{
mod[MOD2]=true;
q.push(x);
}
}
}
}
return ;
} int main()
{int T;
scanf("%d",&T);
while(T--)
{
memset(mod,false,sizeof(mod));
memset(digit,,sizeof(digit));
while(!q.empty()) q.pop(); scanf("%d%d%d",&N,&C,&M);
getchar();
for(int i=;i<M;i++)
{
scanf("%c",&arr[i]);
getchar();
if(arr[i]<=''&&arr[i]>='')
digit[arr[i]-'']=;
else if(arr[i]<='F'&&arr[i]>='A')
digit[arr[i]-'A'+]=;
}
Node xt;
for(int i=;i<=;i++)
{
if(digit[i])
{
if(i>=&&i<)
xt.str[]=i+'';
else if(i>=&&i<=)
xt.str[]=i-+'A';
xt.len=;
q.push(xt);
// int MOD=judge(xt);
// mod[MOD]=true;
}
}
// cout<<q.size()<<"----------\n";
// getchar(); if(N==)
{
if(digit[]) puts("");
else puts("give me the bomb please");
}
else
{
if(bfs())
{
}
else
puts("give me the bomb please");
} } return ;
}
HDOJ 1226 超级密码的更多相关文章
- HDOJ 1226 超级密码(bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1226 思路分析:题目要求寻找一串长度不大于500的C进制的密码,且该密码需要为十进制数N的整数倍. & ...
- hdoj 1226 超级password 【隐图BFS】
称号:hdoj 1226 超级password 分析:这题属于隐式图搜索,状态不是非常明显,须要自己建立. 事实上搜索说白了就是暴力. 这个题目就是,首先对给出的能够组成的全部的数依次枚举.长度从小到 ...
- HDU 1226 超级密码(数学 bfs)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1226 超级密码 Time Limit: 20000/10000 MS (Java/Others) ...
- hdu.1226.超级密码(bfs)
超级密码 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 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整除:若不能,就查 ...
- HDU 1226 超级密码 (搜素)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1226 题意简单,本来是一道很简单的搜素题目. 但是有两个bug: 1.M个整数可能有重复的. 2.N可 ...
- HDU 1226 超级密码(BFS) (还需研究)
Time Limit:10000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Desc ...
- 中兴F412光猫超级密码破解、破解用户限制、关闭远程控制、恢复路由器拨号
不少家庭都改了光纤入户,那肯定少不了光猫的吧.今天以中兴F412光猫为例介绍下此型号光猫超级密码的破解方法.一.F412超级密码破解方法1.运行CMD,输入telnet 192.168.1.1: 2. ...
随机推荐
- Delphi7中编译提示“Unsafe type 'PChar'”的原因及处理办法
delphi7中加入了对.net的支持 在.net中是没有指针的(托管环境中),所以指针都是不安全的,不符合.net规范 所以d7里有警告,可以不管它 DELPHI7已经考虑到了移植到点NET的问题, ...
- SPARK 数据统计程序性能优化。
昨天写完R脚本 没测试就发到博客里, 结果实际运行发现很慢,运行时间在2小时以上, 查看spark控制台, 大量时间消耗在count上, 产生的stage多大70多个 . 分析原因. 1 selec ...
- vim之旅
本人是今年的毕业生, 大学很莫名的选择了一个电子商务专业. 由于专业没有实质性的东西可学,加上对电商不敢兴趣, 于是乎我有了大量的时间在宿舍里折腾电脑. 折腾了几年大三决定转业, 大四在还没找工作之前 ...
- 第十四章 调试及安全性(In .net4.5) 之 对称及非对称加密
1. 概述 本章内容包括:对称及非对称加密算法..net中的加密类.使用哈希操作.创建和管理签名认证.代码访问权限 和 加密字符串. 2. 主要内容 2.1 使用对称和非对称加密 ① 对称加密:使用同 ...
- Python脚本控制的WebDriver 常用操作 <七>浏览器前进和后退操作
下面将使用WebDriver来控制浏览器的前进和后退操作 测试用例场景 此操作和get.url()方法功能相同 Python脚本 # coding=gbk ''' Created on 2013年12 ...
- 避免url传值字符串sjstr过长,使用from表单【隐藏域】post提交
1.普通的url传值<html--------------- <!-- 隐藏域post提交url --> <form id="urlPost" action ...
- hdu 1575 Tr A
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1575 Tr A Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和), ...
- hdu 3288 Resource Allocation
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3288 Resource Allocation Description HDU-Sailormoon i ...
- 从零开始学ios开发(四):IOS控件(1),Image View、Text Field、Keyboard
长话短说,谢谢大家的关注,这篇写了好长时间,下面继续学习ios.我将用2到3篇的篇幅来学习iphone上的一些常用控件,包括Image View.Text Field.Keyboard.Slider等 ...
- [转]vim常用命令
[转]vim常用命令 http://www.cnblogs.com/sunyubo/archive/2010/01/06/2282198.html http://blog.csdn.net/wooin ...