hdu1226 搜索水题

题目就不多说了    密码共为500位   完完全全的广搜       密码其中一个条件是n的倍数  所以最多只可能出现4999中状态     广搜到底         每一位1-15

代码比较简单

#include<stdio.h>

#include<string.h>

#include<queue>

#include<iostream>

using namespace std;

int n,m,c,mark[20],visit[5100];

struct node

{

int len;

int prt[510];

}a,b;

int judge(node s)

{

int i,t=0;

for(i=1;i<=s.len;i++)

{

t=(t*c+s.prt[i])%n;

}

return t;

}

int print(node s)

{

for(int i=1;i<=s.len;i++)

{

if(s.prt[i]<=9) printf("%d",s.prt[i]);

else printf("%c",s.prt[i]-10+‘A‘);

}

printf("\n");

return 0;

}

int bfs()

{

int i,j,x=1;

memset(visit,0,sizeof(visit));

a.len=0;

a.prt[0]=0;

queue<node>q;

q.push(a);

while(!q.empty())

{

b=q.front();

q.pop();

for(i=0;i<16;i++)

{

if(!mark[i]) continue;

if(x==1&&i==0) continue;//第一位不能使零

a=b;

a.len=b.len+1;

a.prt[a.len]=i;

int k=judge(a);

if(k==0)

{

print(a);

return 1;

}

if(visit[k]) continue;

if(a.len<=499);

{

visit[k]=1;

q.push(a);

}

}

x++;

}

return 0;

}

int main()

{

int  T,i,j;

char str[15];

scanf("%d",&T);

while(T--)

{

scanf("%d%d",&n,&c);

scanf("%d",&m);

memset(mark,0,sizeof(mark));

for(i=1;i<=m;i++)

{

scanf("%s",str);

if(str[0]>=‘0‘&&str[0]<=‘9‘)

mark[str[0]-‘0‘]=1;

else

mark[str[0]-‘A‘+10]=1;

}

if(n==0)

{

if(mark[0]) printf("0\n");

else printf("give me the bomb please\n");

}

else

{

int flash=bfs();

if(!flash) printf("give me the bomb please\n");

}

}

return 0;

}

时间: 2024-10-15 20:51:00

hdu1226 搜索水题的相关文章

华为题 搜索水题 DFS

1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <string> 6 #include <iterator> 7 #include <algorithm> 8 #include <cstdlib> 9 #include <deque> 10 #include &l

hdu4845 状态压缩搜索水题

这道题简单来说是和胜利大逃亡续类似的题  只不过这道题没有给你明确的地图 只给了你点之间的关系          唯一的坑点在于一个点可能有多把钥匙 #include<stdio.h> #include<string.h> #include<iostream> #include<queue> using namespace std; struct node { int x,y,step,state; }a,b; int mark[16][16][3030];

hdu2102 (dfs)搜索水题

题意就不多说了   肯见很多人都是用bfsA的  然后我就果断用dfs做了       和其他深搜都一样就是注意下里面的一些剪枝  不然很容易就超时 #include<stdio.h> #include<string.h> #include<iostream> using namespace std; char map[5][15][15]; int mark[5][15][15],t,n,m,flash; int dir[4][2]={0,1,0,-1,1,0,-1,

hdu1254 推箱子 搜索水题(bfs+bfs)

题意就不多说了 我使用bfs+bfs做的      听说bfs+dfs也能做   我觉得都差不多     我就说一下bfs+bfs 注意:箱子走过的地方还能再走   但从同一方向过来的就不能再走了    所以  标记时  得同时记录箱子和方向    方向可以根据人的位置来判断 箱子能往某一方向推的两个条件是: 目的地是空的    人能推动及人能到达要推的地方 然后按照一般广搜做就行 #include<stdio.h> #include<string.h> #include<q

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

简单的dp hdu 数塔(水题)

数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 21314    Accepted Submission(s): 12808 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少

map我觉得非水题-hdu-4329

这个题目真是考验我的英语能力,我弄了2小时才弄懂题目的意思,后来打代码,根据别人的思维打的,因为一开始看不懂题目,就死抠,查了好久没一个负责的,题解一句话:题目怎么说我就怎么打.这题解未免太机智了,我要知道题目意思,还看你作甚.写了好多注释,有一点还是很模糊,getchar()我觉得没啥用,但是不打它就过不了.还有那个排序的东西,为啥需要它呢,我也不是很明了,学长啊,求大腿,实在不行,小腿我也不嫌弃.帮我理解一下题目了. # include <iostream> # include <c

HDU 1520 Anniversary party 树DP水题

非常水的树DP,状态为当前为i,上级来没来 然后跑一遍记忆化搜索即可 #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #include <cstdlib>

ACdream oj C - 神奇的%系列一 (水题系列--略坑)

 C - 神奇的%系列一 Time Limit: 6000/3000 MS (Java/Others)      Memory Limit: 65536/32768 KB (Java/Others) Submit Status Problem Description 在计算机的世界里,%不是百分比,而是除法取余哟! 比如: 4 % 2 = 0 5 % 3 = 2 给你 2<=N<=100000 个数,a[1],a[2]...a[i]...a[n]. 其中:1<=a[i]<=10