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的更多相关文章

  1. 近几年ACM/ICPC区域赛铜牌题

    2013 changsha zoj 3726 3728 3736 3735 2013 chengdu hud 4786 4788 4790 2013 hangzhou hdu 4770 4771 47 ...

  2. HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)

    HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...

  3. 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

    摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...

  4. 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 ...

  5. 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 ...

  6. 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 ...

  7. 2015年ACM长春区域赛比赛感悟

    距离长春区域赛结束已经4天了,是时候整理一下这次比赛的点点滴滴了. 也是在比赛前一周才得到通知要我参加长春区域赛,当时也是既兴奋又感到有很大的压力,毕竟我的第一场比赛就是区域赛水平,还是很有挑战性的. ...

  8. 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 ...

  9. hdu 5881 Tea (2016 acm 青岛网络赛)

    原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=5881 Tea Time Limit: 3000/1000 MS (Java/Others)    Me ...

随机推荐

  1. Java replaceAll不区分大小写

    Java 中replaceAll如何忽略大小写呢? 方式一:在正则表达式前面添加(?i) @Test public void test_replaceAll33(){ String input = & ...

  2. SOE 第五章

    SEO第五章 本次课目标: 1.  掌握代码优化 2.  掌握内链优化 一.代码优化 1)<h>标签 代表网页的标题,总共6个级别(h1-h6) 外观上显示字体的大小的修改,其中<h ...

  3. PE基础1

    PE文件概述 文件格式 .png ..mp4..gif..dll等等,这些文件都具有不同格式 不能随意修改这些文件,否则将无法打开 PE文件(可执行文件) 学习PE文件目标 掌握PE文件就掌握wino ...

  4. django模板系统的基本原则

    写模板,创建template对象,创建 context ,调用render()方法

  5. Calling method 'get' is not valid without an active transaction

    在进行使用注解来配置Spring和Hibernate的整合的时候, 遇到了这个问题, 它的意思是说在调用'get'方法的时候,没有活动的事务. 原因分析: Hibernate强制要求在进行数据库操作的 ...

  6. OpenCV2:第五章 访问图像

    一.行/列访问 1.单行/单列访问 Mat Mat::row(int i) const Mat Mat::col(int j) const 2.多行/多列访问 Range(start,end); Ra ...

  7. install docker-ce for ubuntu

    may need login vpn first docker-ce for ubuntu chinese version docker-ce for ubuntu

  8. centos7.x设置静态IP

    本教程以centOs7.4为例: 1.点击虚拟机的[编辑]选项,选择[虚拟网络编辑器] 2.选择[VMnet8],然后点击[NAT设置] 3.记录[子网掩码]和[网关IP],后面会用到 4.进入终端, ...

  9. 8. EVENTS

    8. EVENTS EVENTS表提供有关事件管理器事件的信息,这将在"使用事件调度程序"中讨论. EVENTS表有以下列: - EVENT_CATALOG:事件所属目录的名称.这 ...

  10. 宝塔nginx配置

    虚拟机配置 server { listen 80; server_name mayibang.co *.mayibang.co; index index.php index.html index.ht ...