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 ...
随机推荐
- 一段字符串中间提取json字符串
项目过程中经常打日志:LOG.error("[failure][CreateOrder] param:{}", JSON.toJSONString(userCreateOrderD ...
- ubuntu 下service php5-fpm restart 报错 stop: Unknown instance: 解决
问题描述: 在安装完扩展后,重启php-fpm,发现一直停止报错 stop: Unknown instance: 通过查看进程,也查询不到该主进程 解决办法: 干掉现在正在执行的进程 pkill ph ...
- windows快捷键cmd中
windows 中cmd中命令: cls ---------> 清屏 dir ----------> 获取目录 Ctrl + c ----> 结束当前命令 cd .. ------ ...
- ignore-on-commit svn 更改文件后 默认不提交文件到服务器(服务器上已存在的文件)
不用那个忽略文件那个,那个功能是删除服务器的文件,然后本地还存在,不符合我的要求 我的要求是 服务器文件在,我不动,然后我改完了,和别人的不冲突,我也不覆盖别人的文件 主要就是默认不提交,这个很重要 ...
- 一次执行两个npm "start": "concurrently 'npm:dev' 'npm:json-server'"
用的这个程序 concurrently 说是再有异步的时候,&& 就不好使,而且&& 也不能执行npm 只能执行命令 官方地址:https://www.npmjs.co ...
- webpack打包 css文件里面图片路径 替换位置
{ test: /\.css$/, use: ExtractTextPlugin.extract({ use: ['css-loader?minimize', 'autoprefixer-loader ...
- JS的本地保存localStorage、sessionStorage用法总结
localStorage 生命周期是永久的 这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在. sessionStorage 生命周期为当前窗口或标签 ...
- OpenCV2:总结篇 工具方法函数
一.简介 OpenCV提供了一些工具方法函数来辅助完成图像运算 二.时间相关 1.getTickCount()和getTickFrequency() double tTime; tTime = (do ...
- \p{space}|\p{Hex}|\p{Digit}|转译符|\1|\g{-1}|[^ab]|/([^\d\D]+)/
小骆驼 第七章 漫游正则表达式王国 #!/usr/bin/perl use strict; use warnings; $_ = 'ab \ cde f ghijk10.x12ln'; if(/d/) ...
- 6 SQL 函数、谓词、CASE表达式
6 函数.谓词.CASE表达式 6-1 各种各样的函数 /* 所谓函数,就是输入某一值得到相应输出结果的功能.输入值称为参数(parameter),输出值称为返回值. 函数大致可以分为以下几种 : 算 ...