题目链接:

E - What a Ridiculous Election

 UVALive - 7672

题目大意:

12345 可以经过若干次操作转换为其它五位数。

操作分三种,分别为:

操作1:交换相邻两数
操作2:选择一位 +1,若大于 9 ,则对 10 取模。
操作3:选择一位 *2 ,若大于 9,则对 10 取模。
其中操作 2 最大进行 3 次,操作 3 最多进行 2 次。

对于给定的五位数,求 12345 在满足限制条件情况下,最少通过几步操作可以转换为目标五位数。若不可能,则输出 -1 。

具体思路:bfs,需要从12345作为起点向其他点跑,把所有情况都算出来、不能输入一个数作为起点。

a[i][j][k]代表12345变成i需要操作二j次,操作三k次,每一次输出遍历j和k就可以了。

AC代码:

 #include<bits/stdc++.h>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn = 1e5+;
int a[maxn][][];
int sto[];
struct node
{
int num;
int add;
int dou;
int step;
node() {}
node(int xx,int yy,int zz,int kk)
{
num=xx;
add=yy;
dou=zz;
step=kk;
}
};
int cal()
{
int ans=;
for(int i=; i<=; i++)
{
ans=ans*+sto[i];
}
return ans;
}
void chuan(int n)
{
sto[]=n%;
n/=;
sto[]=n%;
n/=;
sto[]=n%;
n/=;
sto[]=n%;
n/=;
sto[]=n%;
n/=;
for(int i=; i<=; i++)
{
swap(sto[i],sto[-i+]);
}
}
void bfs()
{
queue<node>q;
q.push(node(,,,));
a[][][]=;
int tmp;
while(!q.empty())
{
node top=q.front();
q.pop();
chuan(top.num);
if(top.add+<=)
{
for(int j=; j<=; j++)
{
tmp=sto[j];
sto[j]++;
sto[j]%=;
int tt=cal();
if(a[tt][top.add+][top.dou]==inf)
q.push(node(tt,top.add+,top.dou,top.step+)),a[tt][top.add+][top.dou]=top.step+;
sto[j]=tmp;
}
}
if(top.dou+<=)
{
for(int j=; j<=; j++)
{
tmp=sto[j];
sto[j]<<=;
sto[j]%=;
int tt=cal();
if(a[tt][top.add][top.dou+]==inf)
{
q.push(node(tt,top.add,top.dou+,top.step+)),a[tt][top.add][top.dou+]=top.step+;
}
sto[j]=tmp;
}
}
for(int j=; j<; j++)
{
swap(sto[j],sto[j+]);
int tt=cal();
if(a[tt][top.add][top.dou]==inf)
{
q.push(node(tt,top.add,top.dou,top.step+)),a[tt][top.add][top.dou]=top.step+;
}
swap(sto[j],sto[j+]);
}
}
}
int main()
{
memset(a,inf,sizeof(a));
bfs();
// chuan(12345);
int n;
int ttt ;
while(~scanf("%d",&n))
{
int minn = inf;
for(int i=; i<=; i++)
{
for(int j=; j<=; j++)
{
minn = min( minn, a[n][i][j] );
}
}
printf("%d\n",minn==inf ? - : minn);
}
return ;
}

 

What a Ridiculous Election UVALive - 7672 (BFS)的更多相关文章

  1. 深搜(DFS)广搜(BFS)详解

    图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...

  2. 【算法导论】图的广度优先搜索遍历(BFS)

    图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...

  3. 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现

    1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...

  4. 【BZOJ5492】[HNOI2019]校园旅行(bfs)

    [HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...

  5. 深度优先搜索(DFS)和广度优先搜索(BFS)

    深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...

  6. 图的 储存 深度优先(DFS)广度优先(BFS)遍历

    图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...

  7. 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)

    一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...

  8. 层层递进——宽度优先搜索(BFS)

    问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/74296 ...

  9. HDU.2612 Find a way (BFS)

    HDU.2612 Find a way (BFS) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...

随机推荐

  1. mysql 有没有参数都报错“mysql: unknown option”

    报错: [root@XXXX tmp]# mysql -uroot -pmysql: unknown option '--You have new mail in /var/spool/mail/ro ...

  2. Django 路由系统(URLconf)

    URLconf是什么? URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的view函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调 ...

  3. 货车运输-洛谷-1967-LCA+最大生成树(kruskal(并查集))

    传送门 一道:LCA+最大生成树 个人认为把这两个的板子写好(并熟练掌握了之后)就没什么难的 (但我还是de了好久bug)qwq 最大生成树:其实就是最小生成树的变形 我用的是kruskal (个人觉 ...

  4. Python两大佬互相撕逼 技术何苦为难技术?

    最近两天 Python 圈发生了一件大事,两个 Python 大佬撕逼了起来了. 不,其实是一个大佬(刘志军)被怼. 事情是这样的. 背景 人物介绍: 董明伟:公众号「Python 之美」的作者,似乎 ...

  5. 目前在segmentfault写博客

    不是打广告.只是由于自己体验之类的关系,转移到segmentfault了,地址 https://segmentfault.com/u/linlinma,欢迎关注和交流

  6. root用户无法访问Mysql数据库问题的解决

    在使用Centos系统远程访问Mysql数据库的时候,系统提示报如下错误: Access Denied for User 'root'@'localhost' (using password: YES ...

  7. spl_autoload_register()怎样注册多个自动加载函数?

    <?php /*function __autoload($class){ require("./class/".$class.".php"); }*/ f ...

  8. QTP自动化测试-打开运行报告

    automation菜单下-点击 result

  9. python之路5-函数

    定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 def hello(): print(& ...

  10. Python学习之路——函数的参数分类

    今日内容 '''实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表达式或三者的组合​*****形参:定义函数,在括号内声明的变量名,用来接受外界传来的值​'''​'''注:形参随着函数的调用 ...