What a Ridiculous Election UVALive - 7672 (BFS)
题目链接:
E - What a Ridiculous Election
题目大意:
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)的更多相关文章
- 深搜(DFS)广搜(BFS)详解
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
- 【算法导论】图的广度优先搜索遍历(BFS)
图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...
- 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现
1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...
- 【BZOJ5492】[HNOI2019]校园旅行(bfs)
[HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...
- 深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...
- 图的 储存 深度优先(DFS)广度优先(BFS)遍历
图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...
- 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)
一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...
- 层层递进——宽度优先搜索(BFS)
问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/74296 ...
- HDU.2612 Find a way (BFS)
HDU.2612 Find a way (BFS) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...
随机推荐
- UVALive - 3713 - Astronauts(图论——2-SAT)
Problem UVALive - 3713 - Astronauts Time Limit: 3000 mSec Problem Description Input The input cont ...
- 创建DVWA环境时遇到的问题
前言:我下载了PHP Study,也按照步骤下载保存了DVWA,之后我又按照百度的准备登陆检查是否正确安装DVWA,于是,我登录了百度上查到的链接:http://localhost/DVWA-mast ...
- Java base64转图片
import sun.misc.BASE64Decoder; import java.io.FileOutputStream; import java.io.OutputStream; public ...
- 迷茫<第三篇:再到北京>
这是2016年初春,三月的北京仍带着丝丝的冷意,我再次来到了这座熟悉又陌生的城市.我是早上6点钟到的北京西站,坐火车过来的,一夜未眠,眼睛很疲劳.这次过来和上次回长沙一样,下了火车先把行李寄存在朋友家 ...
- Python人工智能学习笔记
Python教程 Python 教程 Python 简介 Python 环境搭建 Python 中文编码 Python 基础语法 Python 变量类型 Python 运算符 Python 条件语句 ...
- 解决 AttributeError: 'ForeignKey' object has no attribute 're'
解决办法 # print('rel...',filter_field_obj.re.to.objects.all()) print("rel...", filter_field_o ...
- Python——Pycharm创建Django项目
一.Django的官网 地址:https://www.djangoproject.com/download/ 注:LTS表示一直在维护的版本,建议是带LTS的版本 二.Pycharm下载Django ...
- ubuntu only enable left click
xmodmap -e "pointer = 1 0 0 0 0 0 0 0 0 0"
- vs2017开发IOS(vs2017 xamarin 连接mac)
这两天突然记起巨软的Visual Studio 2017 好像有说可以用C#开发IOS和Android应用,所以就自己去尝试了下生成过程. 相对与IOS来说,Android的生成过程还是比较容易的没有 ...
- Linux之文本编辑器Vim
一.什么是vim vi是一种模式编辑器.vi 是Unix世界里极为普遍的全屏幕文本编辑器,几乎可以说任何一台Unix机器都会提供这套软体,其他的文本编辑器则不一定会存在,但是目前我们使用比较多的是 v ...