这道题就是给你M个C进制的数, 然后让你求最小的数, 这个数是N的整数倍。。搜索即可:剪枝条件:假设有两个数模N都为0那么我们就可以舍弃较大的那个数。为什么可以这样,我们可以假设这两个数是a, b a  = b (mod N)  => a*C + d = b*C + d (mod N), 然后注意取模的时候要用大数取摸的方式。。坑点:N可能为0, 对于N==0的时候,我们应该特殊判断, 代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>using namespace std;
int N, C, M;    //c进制的密码
char num[20];struct State
{char st[505];int len;
}temp, res;int vis[5000 + 10];
int mod(State &st)
{int tmp = 0;for(int i=0; i<st.len; i++){int num;if(st.st[i]>='0' && st.st[i]<='9')  num = st.st[i] - '0';else if(st.st[i]>='A' && st.st[i]<='F') num = st.st[i]-'A'+10;tmp = (tmp*C + num)%N;}return tmp;
}void print(State &u)
{for(int i=0; i<u.len; i++){printf("%c", u.st[i]);}printf("\n");
}int bfs()
{memset(vis, 0, sizeof(vis));queue<State> que;for(int i=0; i<M; i++){temp.len = 1;temp.st[0] = num[i];if(num[i] == '0') continue;if(!vis[mod(temp)]){que.push(temp);vis[mod(temp)] = 1;}}//printf("%d\n", que.size());while(!que.empty()){State u = que.front(); que.pop();if(mod(u) == 0){res = u;return 1;}if(u.len>=500) continue;for(int i=0; i<M; i++){State v = u;v.st[v.len++] = num[i];if(!vis[mod(v)]){que.push(v);vis[mod(v)] = 1;}}}return -1;
}int main()
{int T;scanf("%d", &T);while(T--){scanf("%d%d%d", &N, &C, &M);int tp = 0;for(int i=0; i<M; i++){char s[10];scanf("%s", s);num[tp++] = s[0];}sort(num, num+M);
/*        for(int i=0; i<M; i++)    printf("%c ", num[i]);printf("\n");*/if(N == 0){if(num[0] == '0') printf("0\n");else printf("give me the bomb please\n"); }else {if(bfs() > 0)print(res);else printf("give me the bomb please\n");}}return 0;
}

转载于:https://www.cnblogs.com/xingxing1024/p/5022051.html

HDU1226 搜索 bfs xingxing在努力相关推荐

  1. 广度优先搜索 BFS算法

    广度优先搜索算法(Breadth-First-Search,BFS),又称作宽度优先搜索.BFS算法是从根节点开始,沿着树的宽度遍历树的节点.如果所有节点均被访问,则算法中止. 算法思想 1.首先将根 ...

  2. 一文搞定深度优先搜索(DFS)与广度优先搜索(BFS)【含完整源码】

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  3. 广度优先搜索(BFS)——抓住那头牛(POJ 4001)

    本文将以(POJ 4001)抓住那头牛 为例,讲解经典算法广度优先搜索(BFS)的STL写法 在实际写算法中,怎么能不使用更快.更方便.更准确.更高效的C++ STL模板呢 相信很多人都了解过广度优先 ...

  4. 【算法】深度搜索(DFS) 和 广度搜索(BFS)

    深度搜索(DFS) 点:然后退回到该顶点,搜索其它路径,直到以该顶点为始点的所有路径的顶点都被访问,深度搜索算法是递归算法,因为对于没一个节点来说,执行的是同样的操作.  简单来说,深度搜素算法就是一 ...

  5. 广度/宽度优先搜索(BFS)详解

    1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域,故得名. 一般可以用它做什么呢?一 ...

  6. 人工智能课后作业_python实现广度优先遍历搜索(BFS)(附源码)

    2 广度优先遍历搜索(BFS) 2.1算法介绍 2.2实验代码 2.3实验结果 2.4实验总结 2.1算法介绍 广度优先搜索算法(英语:Breadth-First-Search,缩写为BFS),是一种 ...

  7. 【蓝桥杯】历届试题 青蛙跳杯子(广度优先搜索bfs)(C++)

    [蓝桥杯]历届试题 青蛙跳杯子 问题描述 思路分析 代码实现 问题描述 题目链接:青蛙跳杯子 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 X星球的流行宠物是青蛙,一般有两种颜色: ...

  8. 【八数码问题】基于状态空间法的知识表示与状态搜索:无信息搜索(BFS/DFS) 启发式搜索(A*)

    前言 一.问题引入 二.状态空间法 1. 知识及其表示 2. 状态空间法定义 3. 问题求解 三.基于状态空间搜索法解决八数码问题 1. 八数码问题的知识表示 2. 状态空间图搜索 1. 无信息搜索 ...

  9. 算法简介:层层递进----广度优先搜索(BFS)

    算法简介:层层递进----广度优先搜索(BFS) 算法简介 算法简介 BFS算法思想: 首先以一个未被访问过的顶点作为起始顶点,访问其所有相邻的顶点,然后对每个相邻的顶点,再访问它们相邻的未被访问过的 ...

最新文章

  1. 【攻防世界008】answer_to_everything
  2. renpy 如何执行2个action_如何解决工作中遇到问题丨2个思考方式、2个技巧和1个解决系统...
  3. Hbase单点安装Version1.1.5
  4. zuul 自定义策略_如何为您的社区定义指标策略
  5. html5字体转换,图片转字符画html5版
  6. Cocos Creator下删除AnySDK步骤
  7. serialVersionUID 生成
  8. 【论文总结】DeepEMD:Few-Shot Image Classification with Differentiable Earth Mover’s Distance(附翻译)
  9. 坤坤音效键盘(Python实现)
  10. 主板风扇转不开机是什么问题,电脑开机没反应_电脑开机风扇转但无法启动主板...
  11. 微信 oauth2.0 php,微信公众平台OAuth2.0 认证
  12. Ubuntu,不能sudo,也不能root登录
  13. 两行代码激活windows系统
  14. 万字起底澳本聪:一个正在崩溃的谎言
  15. uniapp本地数据库_Uniapp教程|App/uni-app离线本地存储方案
  16. js判断时间是否为早上,中午,下午,晚上
  17. android 百度音乐 api,[新]百度mp3接口(baidu mp3 api)
  18. 怎么理解CRM客户关系管理系统?
  19. Pandoc 从入门到精通,你也可以学会这一个文本转换利器
  20. input输入框的各种使用方法

热门文章

  1. Linux解压rar、zip、war、tar文件
  2. iOS混淆 -- 生成define 替换名
  3. 操作系统开发系列—13.g.操作系统的系统调用 ●
  4. 区别CALL SCREEN/SET SCREEN/LEAVE TO SCREEN
  5. C#数据结构(一)----线性表
  6. WebBrowser加载完毕后再往下执行
  7. kafka-manager 安装
  8. MVC+EF三层+抽象工厂
  9. Windows Server 2012系列之二安装AD及创建域
  10. There is no public key available for the following key IDs