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) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...
随机推荐
- Python小数据池和字典操作
小数据池 #id 查看内存地址 #多个代码块可以使用小数据池 #一个代码块中有一个问题,就是重复使用 #数字 -5~256 #字符串 字符串 乘法总数长度不能超过20, 0,1除外 #不能有特殊字符 ...
- Linux内核入门到放弃-网络-《深入Linux内核架构》笔记
网络命名空间 struct net { atomic_t count; /* To decided when the network * namespace should be freed. */ a ...
- Linux中断管理
CPU和外设之间的交互,或CPU通过轮询机制查询,或外设通过中断机制主动上报. 对大部分外设中断比轮询效率高,但比如网卡驱动采取轮询比中断效率高. 这里重点关注ARM+Linux组合下中断管理,从底层 ...
- Linux和Uboot下eMMC boot分区读写
关键词:eMMC boot.PARTITION_CONFIG.force_ro等. 1. eMMC的分区 大部分eMMC都有类似如下的分区,其中BOOT.RPMB和UDA一般是默认存在的,gpp分区需 ...
- SkylineGlobe TerraExplorer for Web 7.1.0版本 接口示例
在SkylineGlobe TerraExplorer for Web 7.1.0版本(俗称H5免插件版本)中,如何使用SGWorld接口的三维视域分析方法呢? 请参考下面的示例: 通过下面的代码大家 ...
- Kafka 详解(三)------Producer生产者
在第一篇博客我们了解到一个kafka系统,通常是生产者Producer 将消息发送到 Broker,然后消费者 Consumer 去 Broker 获取,那么本篇博客我们来介绍什么是生产者Produc ...
- Django组件 之中间件
-------------------------------------------------------------------落花不是无情物,待到山花烂漫时. 中间件 中间件的概念 中间件顾名 ...
- 在OSGI容器Equinox中嵌入HttpServer
原文地址:https://liugang594.iteye.com/blog/1328050 简单介绍一下如何在一个osgi的bundle中内嵌使用http服务 一.基础 首先看看在OSGI中怎么启动 ...
- 【alpha阶段】第一次Scrum Meeting
每日任务内容 队员 昨日完成任务 明日要完成的任务 牛宇航 #2 数据库重构https://github.com/rRetr0Git/rateMyCourse/issues/2 #8 后端函数修正及重 ...
- 记自己在spring中使用redis遇到的两个坑
本人在spring中使用redis作为缓存时,遇到两个坑,现在记录如下,算是作为自己的备忘吧,文笔不好,望大家见谅: 一.配置文件 <!-- 加载Properties文件 --> < ...