2016 ACM/ICPC 区域赛(北京) E 题 bfs
https://vjudge.net/problem/UVALive-7672
题意 输入一个五位数n 问由12345变到n的操作最少次数 不可达输出-1
有三种操作
1.交换相邻的位置 次数不限制
2.使某一位上的数字+1 最多使用三次 (mod 10)
3.使某一位上的数字*2 最多使用两次 (mod 10)
解析 很容易想到预处理,然后O(1) 查询,操作次数最少,所以就bfs,一层一层向外拓展。
需要注意的是 一个数被访问过还可以再被访问(进队列),因为得到一个数可以有不同的操作方案,我们都需要将它向下进行扩展
比如说 26345
可 以 12345->22345(1+1)->23345->26345 (两次2操作,一次3操作)
还可以 12345->22345(1 * 2)->23345->26345 (一次2操作,两次3操作)
两个状态都要进队列才能满足答案正确性。然后开个三维数组记录vis[26345][2][1]标记这个状态访问过了。
#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
int ans[][];
int vis[][][]; //0 swap,1 +,2 double
struct node
{
string s;
int a,b,c;
};
int change(string s)//string 转int
{
int x=,ans=;
for(int i=s.length()-;i>=;i--)
{
ans+=(int)(s[i]-'')*x;
x*=;
}
return ans;
}
void bfs()
{
memset(ans,inf,sizeof(ans));
memset(vis,,sizeof(vis));
queue<node>q;
string beg="";
q.push({beg,,,});
ans[change(beg)][]=;
while(!q.empty())
{
node e=q.front();
string now=e.s;q.pop();
int noww=change(now);
if(e.b<)
{
for(int i=;i<;i++)
{
string t=now;
if(t[i]=='') t[i]='';
else t[i]++;
int temp=change(t);
if(!vis[temp][e.b+][e.c])
{
vis[temp][e.b+][e.c]=;
ans[temp][]=min(ans[temp][],e.a+e.b+e.c+);
q.push({t,e.a,e.b+,e.c});
}
}
}
if(e.c<)
{
for(int i=;i<;i++)
{
string t=now;
int k=t[i]-'';
k+=k,k%=;
t[i]=''+k;
int temp=change(t);
if(!vis[temp][e.b][e.c+])
{
vis[temp][e.b][e.c+]=;
ans[temp][]=min(ans[temp][],e.a+e.b+e.c+);
q.push({t,e.a,e.b,e.c+});
}
}
}
for(int i=;i<;i++)
{
string t=now;
swap(t[i],t[i+]);
int temp=change(t);
if(ans[temp][]==inf)
{
ans[temp][]=min(ans[temp][],e.a+e.b+e.c+);
q.push({t,e.a+,e.b,e.c});
}
}
}
}
int main()
{
bfs();
string s;
while(cin>>s)
{
int x=change(s);
if(ans[x][]==inf)
cout<<-<<endl;
else
cout<<ans[x][]<<endl;
}
}
2016 ACM/ICPC 区域赛(北京) E 题 bfs的更多相关文章
- 近几年ACM/ICPC区域赛铜牌题
2013 changsha zoj 3726 3728 3736 3735 2013 chengdu hud 4786 4788 4790 2013 hangzhou hdu 4770 4771 47 ...
- HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)
HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...
- 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)
摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...
- 2016 ACM/ICPC Asia Regional Qingdao Online(2016ACM青岛网络赛部分题解)
2016 ACM/ICPC Asia Regional Qingdao Online(部分题解) 5878---I Count Two Three http://acm.hdu.edu.cn/show ...
- 2016 ACM/ICPC Asia Regional Dalian Online 1006 /HDU 5873
Football Games Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- HDU 5875 Function 【倍增】 (2016 ACM/ICPC Asia Regional Dalian Online)
Function Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- 2015年ACM长春区域赛比赛感悟
距离长春区域赛结束已经4天了,是时候整理一下这次比赛的点点滴滴了. 也是在比赛前一周才得到通知要我参加长春区域赛,当时也是既兴奋又感到有很大的压力,毕竟我的第一场比赛就是区域赛水平,还是很有挑战性的. ...
- hdu 5868 2016 ACM/ICPC Asia Regional Dalian Online 1001 (burnside引理 polya定理)
Different Circle Permutation Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 262144/262144 K ...
- hdu 5881 Tea (2016 acm 青岛网络赛)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=5881 Tea Time Limit: 3000/1000 MS (Java/Others) Me ...
随机推荐
- iOS开发-Runtime详解
iOS开发-Runtime详解 简介 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的.比如: [recei ...
- [Python學習筆記] 使用xlwings 插入註解 (forked 版本)
到今天為止 xlwings 還沒有插入註解的功能 去原始開發者的 Github Pull Requests 他說之前有人有建議要加入這個功能 但他還沒更新~ 如果需要使用 Python 來插入註解的話 ...
- SQLite与MySQL、SQLServer等异构数据库之间的数据同步
SQLite DBSync是开源嵌入式数据库SQLite的数据同步引擎,实现了SQLite与SQLite数据库之间以及SQLite与异构数据库(Oracle.MySQL.SQLServer)之间的增量 ...
- ElasticSearch数据库同步插件logstash
1.下载和elasticsearch 相同版本的logstash. 2.进行解压后,进入bin下,新建一个文件mysql.conf,并输入 input { stdin{ }} output { std ...
- django 模板中{%for%}的使用
1.{%for athlete in list reversed%} reversed用于反向迭代 2.for 标签 支持一个可选的 empty 变量 3.forloop 模板变量 4.forloo ...
- oracle 存储过程,存储函数,包,
http://heisetoufa.iteye.com/blog/366957 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过 ...
- PHP中的预定义常量、类常量和魔术常量的区别
PHP 向它运行的任何脚本提供了大量的预定义常量.不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 对于一些基本的常量是这些常量在 ...
- 宝塔nginx配置
虚拟机配置 server { listen 80; server_name mayibang.co *.mayibang.co; index index.php index.html index.ht ...
- JAVA:windows myeclipse jdk tomcat maven 完美搭建
文章来源:http://www.cnblogs.com/hello-tl/p/8305027.html 0.下载所需安装包 jdk-7u71-windows-x64.exe 链接:http://p ...
- JQuery给元素动态增删类或特性
背景:通过JQuery动态给Html元素增加.删除类或属性,使Html元素在不同的时刻呈现不同的样式,给用户更好的体验感觉. 如存在以下p片段和button按钮,代码如下: <p id=&quo ...