Hihocoder 1426 E. What a Ridiculous Election (BFS)
来源:互联网 发布:c语言编写 玫瑰花 编辑:程序博客网 时间:2024/05/20 08:42
Problem
12345
可以经过若干次操作转换为其它五位数。
操作分三种,分别为:
- 交换相邻两数
- 选择一位 +1,若大于 9 ,则对 10 取模
- 选择一位 *2 ,若大于 9,则对 10 取模
其中操作 2 最大进行 3 次,操作 3 最多进行 2 次。
对于给定的五位数,求 12345
在满足限制条件情况下,最少通过几步操作可以转换为目标五位数。若不可能,则输出 -1 。
解题思路
BFS 预处理产生 12345
能够变换出的所有可能五位数,记录操作 2 和操作 3 的次数作为限制。
代码
#include<bits/stdc++.h>using namespace std;int minStp[100000][4][3];string str;struct Node { string s; int op2, op3, stp; Node() {}; Node(string _s, int _op2, int _op3, int _stp) { s = _s, op2 = _op2, op3 = _op3, stp = _stp; }} p, q;bool operator<(Node a, Node b) { return a.stp > b.stp;}int str2int(string s) { int ret = 0; for(int i=0;i<5;i++) ret *= 10, ret += s[i]-'0'; return ret;}void bfs(){ priority_queue<Node> que; que.push(Node("12345", 0, 0, 0)); minStp[12345][0][0] = 0; int num; while(!que.empty()) { p = que.top(); que.pop(); q.stp = p.stp + 1; for(int i=0;i<4;i++) { q.s = p.s; swap(q.s[i], q.s[i+1]); q.op2 = p.op2, q.op3 = p.op3; num = str2int(q.s); if(minStp[num][q.op2][q.op3] != 0x3f3f3f3f) continue; minStp[num][q.op2][q.op3] = q.stp; que.push(q); } if(p.op2 < 3) { for(int i=0;i<5;i++) { q.s = p.s; q.s[i] = char(((q.s[i]-'0')+1)%10 + '0'); q.op2 = p.op2+1, q.op3 = p.op3; num = str2int(q.s); if(minStp[num][q.op2][q.op3] != 0x3f3f3f3f) continue; minStp[num][q.op2][q.op3] = q.stp; que.push(q); } } if(p.op3 < 2) { for(int i=0;i<5;i++) { q.s = p.s; q.s[i] = char(((q.s[i]-'0')*2)%10 + '0'); q.op2 = p.op2, q.op3 = p.op3+1; num = str2int(q.s); if(minStp[num][q.op2][q.op3] != 0x3f3f3f3f) continue; minStp[num][q.op2][q.op3] = q.stp; que.push(q); } } }}int main(){ memset(minStp, 0x3f, sizeof(minStp)); bfs(); while(cin>>str) { int mn = 0x3f3f3f3f; for(int i=0;i<=3;i++) for(int j=0;j<=2;j++) mn = min(mn, minStp[str2int(str)][i][j]); printf("%d\n", mn==0x3f3f3f3f?-1:mn); }}
阅读全文
0 0
- Hihocoder 1426 E. What a Ridiculous Election (BFS)
- HihoCoder 1426 What a Ridiculous Election (BFS)
- hihocoder 1426 What a Ridiculous Election
- 2016 ACM-ICPC 亚洲区域赛北京站E题 What a Ridiculous Election (BFS预处理)
- hihocoder1426 What a Ridiculous Election(bfs预处理)
- 2016北京区域赛E UVAlive 7672 题目:What a Ridiculous Election 带约束条件的BFS
- What a Simple Research HihoCoder
- hihocoder 1425 What a Beautiful Lake
- hihocoder 1427 What a Simple Research
- BFS-E - Find a way
- hihoCoder 1233 Boxes(bfs)
- hihocoder 1425What a Beautiful Lake(实验专用)
- HihoCoder 1233 Boxes(bfs打表)
- HihoCoder 1233 Boxes (bfs 状压)
- hihocoder#1654 : XY游戏(BFS)
- HihoCoder 1251 BFS预处理
- HihoCoder 1233 Boxes BFS
- Kindergarten Election(ZOJ3715)
- java基础(面试)
- 埃拉托斯特尼筛法 VS 欧拉筛法 (素数筛选) Java
- -webkit-tap-highlight-color
- 判断两个不带环链表是否相交?若相交,求入口点。
- codeforces 676-C. Vasya and String(尺取)
- Hihocoder 1426 E. What a Ridiculous Election (BFS)
- Android笔记(10)MD5加密
- 重要标签总结
- 51NOD1094 和为k的连续区间
- 2.4变动和最终变量(Volatile and Final Variables)
- springmvc数据回显(九)
- Spring注解配置定时任务<task:annotation-driven/>
- Java反射(8个)
- 上海找工作之旅