题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4294

思路:题目的意思是说,给你n,k,则求出n的正整数倍数,使得这个数字在k进制下表示的时候需要的不同数字最小。首先明确最多的不同数字需要2种,证明如下a,aa,aaa,aaaa,......找出n个连续的,那么中间至少有两个mod n的值是相等的,那么这两个数字相减,得到aaa...000肯定能被n整除,因此可以bfs搜索只含有1个数字的和只含有2个数字的。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;
#define MAXN 77777 struct Node{
int num,val,pre,len;
}que[MAXN]; int number[];
int n,k,min_len,length,flag,End;
string ans,tmp;
bool mark[MAXN]; bool bfs(int m)
{
Node now,next;
memset(mark,false,sizeof(mark));
int head=,tail=-;
for(int i=;i<=m;i++)if(number[i]){
now.len=;
now.num=number[i];
now.pre=-;
now.val=number[i]%n;
que[++tail]=now;
mark[now.val]=true;
}
while(head<=tail){
now=que[head];
if(now.len>min_len)break;
if(now.val==){
End=head;
length=now.len;
return true;
}
for(int i=;i<=m;i++){
next=now;
next.val=(now.val*k+number[i])%n;
if(!mark[next.val]){
mark[next.val]=true;
next.len++;
next.num=number[i];
next.pre=head;
que[++tail]=next;
}
}
head++;
}
return false;
} void Get_String(int k)
{
if(k==-)return ;
Get_String(que[k].pre);
tmp+=(que[k].num+'');
} int main()
{
while(~scanf("%d%d",&n,&k)){ //input整数n和k进制
ans="";
min_len=;
flag=;
for(int i=;i<k;i++){ //先搜索只有1个数字的
number[]=i;
if(bfs()){
flag=;
tmp="";
Get_String(End);
if(length<min_len||(length==min_len&&tmp<ans)){
ans=tmp;
min_len=length;
}
}
}
if(flag){
cout<<ans<<endl;
continue;
}
for(int i=;i<k;i++){ //搜索2个数字的
number[]=i;
for(int j=i+;j<k;j++){
number[]=j;
if(bfs()){
tmp="";
Get_String(End);
if(length<min_len||(length==min_len&&tmp<ans)){
ans=tmp;
min_len=length;
}
}
}
}
cout<<ans<<endl;
}
return ;
}

hdu 4294(bfs)的更多相关文章

  1. hdu 4531 bfs(略难)

    题目链接:点我 第一次不太清楚怎么判重,现在懂了,等下次再做 /* *HDU 4531 *BFS *注意判重 */ #include <stdio.h> #include <stri ...

  2. HDU 2822 (BFS+优先队列)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2822 题目大意:X消耗0,.消耗1, 求起点到终点最短消耗 解题思路: 每层BFS的结点,优先级不同 ...

  3. HDU 1180 (BFS搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1180 题目大意:迷宫中有一堆楼梯,楼梯横竖变化.这些楼梯在奇数时间会变成相反状态,通过楼梯会顺便到达 ...

  4. HDU 2531 (BFS搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2531 题目大意: 你的身体占据多个点.每次移动全部的点,不能撞到障碍点,问撞到目标点块(多个点)的最 ...

  5. HDU 5025 (BFS+记忆化状压搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5025 题目大意: 迷宫中孙悟空救唐僧,可以走回头路.必须收集完钥匙,且必须按顺序收集.迷宫中还有蛇, ...

  6. HDU 1429 (BFS+记忆化状压搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1429 题目大意:最短时间内出迷宫,可以走回头路,迷宫内有不同的门,对应不同的钥匙. 解题思路: 要是 ...

  7. HDU 1026 (BFS搜索+优先队列+记录方案)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1026 题目大意:最短时间内出迷宫.迷宫里要杀怪,每个怪有一定HP,也就是说要耗一定时.输出方案. 解 ...

  8. HDU 1312 (BFS搜索模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1312 题目大意:问迷宫中有多少个点被访问. 解题思路: DFS肯定能水过去的.这里就拍了一下BFS. ...

  9. HDU 1242 (BFS搜索+优先队列)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1242 题目大意:多个起点到一个终点,普通点耗时1,特殊点耗时2,求到达终点的最少耗时. 解题思路: ...

随机推荐

  1. win7 linux双系统删除linux

    本文内容收集自互联网,共两篇,中间以“分界线”进行分割. linux的卸载 一.win7与linux都使用grub来引导 卸载:不能直接删除ubuntu分区,这样会造成win7也启动不了 正确方法: ...

  2. linux route命令使用

    说明:route命令是打印和操作ip路由表描述:route操作基于内核ip路由表,它的主要作用是创建一个静态路由让指定一个主 机或者一个网络通过一个网络接口,如eth0.当使用"add&qu ...

  3. Python-PyQt4学习资料汇总

    摘自:http://www.cnblogs.com/coderzh/archive/2009/06/28/1512654.html 官方文档: http://pyqt.sourceforge.net/ ...

  4. test_login

    import unittest,requestsimport ddtfrom BeautifulReport import BeautifulReport as bffrom urllib impor ...

  5. 在windows 2012中安装sharepoint 2013时遇到问题的处理办法

    众所周知,sharepoint 2013是早于windows 2012的,所以在安装的时候,总会出现各种奇怪的问题,也就是所谓的一个个坑,为了减少大家掉到坑里的次数和排除故障的时间,我在这里记录下我曾 ...

  6. 【转】H.264(H264)视频文件的制作

    转自:http://blog.csdn.net/caoshangpa/article/details/51166109 一.准备工作 1.下载并安装优酷客户端 2.下载ffmpeg可执行文件,解压可用 ...

  7. mongodb - Replication Set成员维护

    1.添加复制集成员 ybb:PRIMARY> rs.add("cc.example.com:27020") { "ok" : 1 } ybb:PRIMAR ...

  8. 阿里云Ubuntu部署java web - 文件夹

    文件夹(点击章节标题阅读): 阿里云Ubuntu部署java web(1) - 系统配置         ssh链接server(使用终端远程链接)        加入用户        给用户赋予运 ...

  9. sklearn 中模型保存的两种方法

    一. sklearn中提供了高效的模型持久化模块joblib,将模型保存至硬盘. from sklearn.externals import joblib #lr是一个LogisticRegressi ...

  10. python DataFrame获取行数、列数、索引及第几行第几列的值

    print df.columns.size#列数 2 print df.iloc[:,0].size#行数 3 print df.ix[[0]].index.values[0]#索引值 0 print ...