HDU 1226 超级密码(BFS) (还需研究)
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
22 10
3
7 0 1
2 10
1
1
25 16
3
A B C
Sample Output
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
int n,m,k;
int re[];
void init()
{
scanf("%d%d%d",&n,&m,&k);
char ch[];
for(int i=; i<k; i++)
{
scanf("%s",ch);
if(ch[]<=''&&ch[]>='') re[i]=ch[]-'';
else re[i]=ch[]-'A'+;
}
sort(re,re+k);//将所有组成密码数字存贮在re数组里,并由小到大排序,re数组就成为了bfs的节点源。
}
int pre[];
int v[];
int ans[],cnt;
queue<int> que;
void find(int k)
{
if(pre[k]!=-) find(pre[k]);
ans[cnt++] = v[k];
}
void solve()
{
if(n==)
{
if(re[]!=)
printf("give me the bomb please\n");
else
printf("0\n");
return ;
}
memset(v,-,sizeof(v));
while(!que.empty()) que.pop();
for(int i=; i<k; i++)
{
if(re[i])
{
que.push(re[i]%n);
if(v[re[i]%n]==-)
pre[re[i]%n]=-,v[re[i]%n] = re[i];//将re数组里的数字全部对n取模,存放在队列里,成为第一批节点。
}
}
while(!que.empty())
{
int e = que.front();
que.pop();
if(e==) break ;
for(int i=; i<k; i++)
{
int t = (e*m+re[i])%n;//我也还暂时不明白为什么是这么写,反正是衍生出下一批节点。
if(v[t]!=-) continue;
pre[t] = e;
v[t] = re[i];
que.push(t);
}
}
if(v[]==-)
{
printf("give me the bomb please\n");
return ;
}
cnt = ;
find();//搜索结果,直至取模值为0,即得到最终结果。
if(cnt>)
{
printf("give me the bomb please\n");
return ;
}
for(int i=; i<cnt; i++)
{
if(ans[i]<=) printf("%d",ans[i]);
else printf("%c",ans[i]-+'A');
}
printf("\n");
}
int main()
{
int cas;
scanf("%d",&cas);
while(cas--)
{
init();
solve();
}
return ;
}
HDU 1226 超级密码(BFS) (还需研究)的更多相关文章
- hdu.1226.超级密码(bfs)
超级密码 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 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 ...
随机推荐
- du与df的区别
我们知道,磁盘的整体数据是记录在superblock中的,但是每一个文件的容量信息则在inode当中记载的.因此,引出了两个查看这些数据信息的命令: df:列出文件系统的整体磁盘使用量.由于df主要读 ...
- upload-labs-env文件上传漏洞 1-10关
Pass-01 首先先看源码: function checkFile() { ].value; if (file == null || file == "") { alert(&q ...
- Emergency
题意:有N个点,M条边,每个点有权值,问从起点到终点最短路的个数以及权值最大的最短路的权值. 分析:修改Dijstra模板. #include<bits/stdc++.h> using n ...
- TCP为什么三次握手四次挥手
TCP概述: 它提供面向连接的服务,在传送数据之前必须先建立连接,数据传送完成后要释放连接.因此TCP是一种可靠的的运输服务,也正因为这样,不可避免的增加了许多额外的开销,比如确认,流量控制等.对应的 ...
- Java笔记--网络编程
1.IP地址:InetAddress类 --唯一的标识Internet上的计算机 --本地回环地址(hostAddress)127.0.0.1 主机名(hostName):localhost //根据 ...
- java 循环节长度
循环节长度 两个整数做除法,有时会产生循环小数,其循环部分称为:循环节. 比如,11/13=6=>0.846153846153- 其循环节为[846153] 共有6位. 下面的方法,可以求出循环 ...
- redis以服务模式开机启动
第一步 修改redis为后台启动 vim /usr/redis/redis.conf #路径根据实际情况决定 # By default Redis does not run as a daemon. ...
- jQuery省市联动(XML/JSON)
准备: 导包 在src下导入c3p0-config.xml 导入JDBCUtil 创建数据库 新建js文件夹导入jQuery配置文件 NO01:创建city.jsp页面 <%@ page lan ...
- 深度解析Critical Thinking的四个阶段
关于批判性思维我们一直都在讨论学习,但是小编相信没有几个留学生敢说自己有Critical Thinking,但它又是essay写作中必须存在的.那么批判性思维需要怎么培养呢?今天小编就给同学们分析一下 ...
- metaspace 元空间
为何移除持久代 它的大小是在启动时固定好的, 很难进行调优 -XX:MaxPermSize(默认64M) HotSpot 的内部类型也是Java对象: 它可能会在Full GC中被移动, 同时它对应用 ...