hdu1226
hdu1226 :点击打开题目链接
本题目由于题目意思,容易得知是一道广搜的题目。
首先。 我们需要知道 ,大数取模,比如 如何判断1234567 对15 取模的数为多少?答案是7,但是如果他是大数怎么办,
假设num数组存一个大数;左边为高位,右边为低位
int temp=0;
for(int i=最高位;i<=个位;i++)
temp=(temp * 某进制+num[i])%N;
return temp; // 最终的temp就是bignumber mod N 的值。
如果该余数出现过就没必要再次进队列了,因为此次模一样代表着下次的模也一样当这个数的模为0,那么前面的数模早已经为0,所以,后者没必要进队列。
.12
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<vector>
#include<string>
#include<string.h>
#include<queue> using namespace std;
const int INF=~(1<<31);
const int MM=1005; int N,C,M;
bool digit[18],vis[5005]; int mod(string& a)
{
int temp=0;
for(int i=0; i<a.size(); i++)
{
temp=(temp*C+(int)a[i])%N;
}
return temp;
}
void print(string& a)
{
for(int i=0; i<a.size(); i++)
{
printf("%X",(int)a[i]);
}
cout<<endl;
}
bool bfs()
{
queue<string>q;
string a,b;
for(int i=1; i<=15; i++)
{
if(digit[i])
{
a=(char)i;
if(mod(a)==0)
{
print(a);
return false;
}
q.push(a);
}
}
while(!q.empty())
{
a=q.front();
q.pop();
for(int i=0; i<=15; i++)
{
if(digit[i]&&a.size()+1<=500)
{
b=a+(char)i;
int mood=mod(b);
if(mood==0)
{
print(b);
return false;
}
else
{
if(vis[mood]==0)
{
vis[mood]=1;
q.push(b);
}
}
}
}
}
return true;
}
int main(void)
{
int ncase;
scanf("%d",&ncase);
while(ncase--)
{
memset(digit,0,sizeof(digit));
memset(vis,0,sizeof(vis));
scanf("%d%d%d",&N,&C,&M);
for(int i=0; i<M; i++)
{
int val;
scanf("%x",&val);
digit[val]=true;
}
if(N==0)
{
if(digit[0]) cout<<"0"<<endl;
else cout<<"give me the bomb please"<<endl;
continue;
}
if(bfs()) cout<<"give me the bomb please"<<endl;
}
return 0;
}
hdu1226的更多相关文章
- 超级密码 hdu1226 bfs
超级密码 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- HDU-1226 超级密码 (BFS+剪枝)
Problem Description Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息:密 码是一个C进 ...
- hdu1226 超级密码 (BFS,里面用了大数取余原理)
Problem Description Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息: 密码是一个C进 ...
- HDU1226:超级密码(BFS)
Problem Description Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息: 密码是一个C进 ...
- hdu1226超级密码 bfs
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1226/ 题目大意是:寻找一个五百位之内的C进制密码,该密码是N的正整数倍,而且只能用给定的数构成密码,求这样的密 ...
- hdu 1226 BFS + bfs记录路径
http://acm.hdu.edu.cn/showproblem.php? pid=1226 为了节省空间.您可以使用vis初始化数组初始化-1. 发现BFSeasy错了地方 始一直WA在这里:就是 ...
- 2019的hdu暑假作业(欢迎纠错)
1219 遍历计数. #include<bits/stdc++.h> #define QAQ 0 using namespace std; ]; ]; int main(){ )){ me ...
随机推荐
- android的系统学习
先从Android的应用开发开始,等到对应用掌握的比较熟悉了,开始慢慢阅读一些Android 应用框架层的源代码,然后再渐渐往下去了解Android的JNI.Libraries.Dalvik虚拟机.H ...
- Servlet 2.4 规范之第二篇:Servlet接口
Servlet接口是Servlet API的最核心抽象类.所有的servlets都直接实现了这个接口,或者以更通用的方式继承了这个接口的实现类.Servlet API自带了两个实现了Servlet接口 ...
- 将数字转换成Excel表头格式的字母序号
/** * 从0开始算起,0-25转A-Z * @param num * @return Character.valueOf((char)((num-1)+65))+&quo ...
- T3137 栈练习1 codevs
codevs.cn/problem/3137 题目描述 Description 给定一个栈(初始为空,元素类型为整数,且小于等于100),只有两个操作:入栈和出栈.先给出这些操作,请输出最终栈的栈顶元 ...
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round]
一部分题解,算是自己SB了 上午的TC 也是这样 写好了代码,却一直没注意细节,然后以为错了. 此处省100字,ps 貌似紫了,作为一个老菜鸡,终于紫了 A,B 都是语文题 C: 给以一个三角形一样的 ...
- slf4j 搭配 log4j2 处理日志
目录 关于 log4j 关于 slf4j 案例使用 关于 log4j Log4j + Slf4j 的使用组合最为常见,但是我们知道 Log4j 目前已经停止更新了.Apache推出了新的 Log4j2 ...
- go语言学习之路 一:开发环境配置
1. 安装go 1)下载地址:http://www.golangtc.com/download,下载后直接双击msi文件安装,默认安装在c:\go 2)安装完成后默认会在环境变量 Path 后添加 G ...
- java学习笔记(四)面向对象
一.形參长度可变的方法 当传入被调用的函数參数数量不确定时,在方法最后一个形參的类型后加上三个点号(...),表明该形參能够接受多个參数值.多个參数值被当做数组传入,这些參数必须为指定的类型. pac ...
- mahout in Action2.2-聚类介绍-K-means聚类算法
聚类介绍 本章包含 1 实战操作了解聚类 2.了解相似性概念 3 使用mahout执行一个简单的聚类实例 4.用于聚类的各种不同的距离測算方法 作为人类,我们倾向于与志同道合的人合作-"鸟的 ...
- [POI 2001+2014acm上海邀请赛]Gold Mine/Beam Cannon 线段树+扫描线
Description Byteman, one of the most deserving employee of The Goldmine of Byteland, is about to re ...