题意:给你两个只由1~6组成的串,问你B串至少要经过几次操作变成A串。

一次操作要么选择一个种类的数,将其全部变成另一种类;要么选择一个数,将其变为另一个数。

可以证明,一定先进行一定数量的第一种操作,然后再进行一定数量的第二种操作。

所以可以BFS预处理序列每种数要变成哪种数所需要的代价。初始状态是123456,代表1->1,2->2,...,6->6,一共才6^6种状态。

然后再枚举一遍所有状态,把该种状态下,剩下的仍然不符的数强行变过去就行了,然后在所有答案中取个最小的。

  1. #include<cstdio>
  2. #include<queue>
  3. #include<cstring>
  4. using namespace std;
  5. int d[700000];
  6. bool vis[700000];
  7. int n,pw[10];
  8. queue<int>q;
  9. char s[125],s2[125];
  10. int main(){
  11. // freopen("c.in","r",stdin);
  12. memset(d,0x7f,sizeof(d));
  13. pw[0]=1;
  14. for(int i=1;i<=6;++i){
  15. pw[i]=pw[i-1]*10;
  16. }
  17. q.push(123456);
  18. vis[123456]=1;
  19. d[123456]=0;
  20. int t[7];
  21. while(!q.empty()){
  22. bool used[7]={0};
  23. int U=q.front(); q.pop();
  24. for(int i=1;i<=6;++i){
  25. if(!used[i]){
  26. int e=0;
  27. int wei=U/pw[i-1]%10;
  28. for(int j=i;j<=6;++j){
  29. if(wei==U/pw[j-1]%10){
  30. used[j]=1;
  31. t[++e]=j;
  32. }
  33. }
  34. for(int j=1;j<=6;++j){
  35. if(j!=wei){
  36. int tmp=U;
  37. for(int k=1;k<=e;++k){
  38. tmp+=(j-wei)*pw[t[k]-1];
  39. }
  40. if(!vis[tmp]){
  41. vis[tmp]=1;
  42. d[tmp]=d[U]+1;
  43. q.push(tmp);
  44. }
  45. }
  46. }
  47. }
  48. }
  49. }
  50. while(scanf("%s%s",s2+1,s+1)!=EOF){
  51. int ans=2147483647;
  52. n=strlen(s+1);
  53. for(int i=1;i<=6;++i){
  54. for(int j=1;j<=6;++j){
  55. for(int k=1;k<=6;++k){
  56. for(int l=1;l<=6;++l){
  57. for(int p=1;p<=6;++p){
  58. for(int q=1;q<=6;++q){
  59. int x=i*100000+j*10000+k*1000+l*100+p*10+q;
  60. if(d[x]<2000000000){
  61. int cnt=0;
  62. for(int pp=1;pp<=n;++pp){
  63. int tt;
  64. if(s[pp]=='1'){
  65. tt=i;
  66. }
  67. else if(s[pp]=='2'){
  68. tt=j;
  69. }
  70. else if(s[pp]=='3'){
  71. tt=k;
  72. }
  73. else if(s[pp]=='4'){
  74. tt=l;
  75. }
  76. else if(s[pp]=='5'){
  77. tt=p;
  78. }
  79. else{
  80. tt=q;
  81. }
  82. if(tt+'0'!=s2[pp]){
  83. ++cnt;
  84. }
  85. }
  86. ans=min(ans,cnt+d[x]);
  87. }
  88. }
  89. }
  90. }
  91. }
  92. }
  93. }
  94. printf("%d\n",ans);
  95. }
  96. return 0;
  97. }

【BFS】【枚举】HihoCoder - 1251 - The 2015 ACM-ICPC Asia Beijing Regional Contest - C - Today Is a Rainy Day的更多相关文章

  1. hdu 5444 Elven Postman(二叉树)——2015 ACM/ICPC Asia Regional Changchun Online

    Problem Description Elves are very peculiar creatures. As we all know, they can live for a very long ...

  2. (并查集)Travel -- hdu -- 5441(2015 ACM/ICPC Asia Regional Changchun Online )

    http://acm.hdu.edu.cn/showproblem.php?pid=5441 Travel Time Limit: 1500/1000 MS (Java/Others)    Memo ...

  3. (二叉树)Elven Postman -- HDU -- 54444(2015 ACM/ICPC Asia Regional Changchun Online)

    http://acm.hdu.edu.cn/showproblem.php?pid=5444 Elven Postman Time Limit: 1500/1000 MS (Java/Others)  ...

  4. 2015 ACM/ICPC Asia Regional Changchun Online HDU 5444 Elven Postman【二叉排序树的建树和遍历查找】

    Elven Postman Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  5. ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków

    ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków Problem A: Rubik’s Rect ...

  6. 2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred)

    2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred) easy: ACE ...

  7. HDU 5889 Barricade 【BFS+最小割 网络流】(2016 ACM/ICPC Asia Regional Qingdao Online)

    Barricade Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  8. HDU 5458 Stability(双连通分量+LCA+并查集+树状数组)(2015 ACM/ICPC Asia Regional Shenyang Online)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5458 Problem Description Given an undirected connecte ...

  9. 【二分】【最长上升子序列】HDU 5489 Removed Interval (2015 ACM/ICPC Asia Regional Hefei Online)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5489 题目大意: 一个N(N<=100000)个数的序列,要从中去掉相邻的L个数(去掉整个区间 ...

随机推荐

  1. mysql查询日期相关的

    今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...

  2. 使sqoop能够启用压缩的一些配置

    在使用sqoop 将数据库表中数据导入至hdfs时 配置启用压缩 hadoop 的命令    检查本地库支持哪些  bin/hadoop checknative 需要配置native    要编译版本 ...

  3. 【leetcode 简单】第十九题 删除排序链表中的重复元素

    给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3-&g ...

  4. 用C++写程序的一些感悟

    前言 近期使用C++有了一些心得很感悟,这里整理一下. 心得1 如果只会使用LabVIEW写程序,还想要进一步深入程序设计,一定要学习一门文本语言. 什么是会用LabVIEW 会用是个比较笼统的概念. ...

  5. Producer Flow Control 和 vmQueueCursor

    ActiveMQ可以开启或关闭生产者流量控制Producer Flow Control ,基本原理是producer 发送一条消息会收到broker返回的ack响应,当磁盘或内存快满的时候broker ...

  6. php强制输出到浏览器下载

    $file_name="test.mp3"; $mp3_url = "";header( "Pragma: public" );header ...

  7. WPS Office 2012 专业版 附正版序列号

    WPS Office 2012 专业版 附正版序列号 首先说说WPS的研发历史沿革:1988年5月,一个名叫求伯君的程序员凭借一台386电脑写出了WPS 1.0,从此开创了中文字处理时代,并迅速占领中 ...

  8. 【洛谷】P4585 [FJOI2015]火星商店问题

    题解 题目太丧,OJ太没有良心,我永远喜欢LOJ! (TLE报成RE,垃圾洛谷,我永远喜欢LOJ) 好的,平复一下我debug了一上午崩溃的心态= =,写一写这道题的题解 把所有限制去掉,给出一个值, ...

  9. Scrollify – jQuery全屏滚动插件

    和 fullPage.js 一样,Scrollify 也是一款基于 jQuery 的全屏滚动插件.跟 fullPage.js 相比,Scrollify 更加小巧,压缩后不足 4KB.但功能上不如 fu ...

  10. 【JavaWeb开发】初步实现网站应用钉钉扫码登录

    http://blog.csdn.net/baofeidyz/article/details/59059379 版权声明:转载请注明我的个人微信平台 暴沸 目录(?)[+] 写在前面:如果你还不知道钉 ...