状态压缩+逆向BFS。
方向数组就是任意相邻的两点(初始化时减1),每个顶点均有4个相邻点。因此,共有16*4/2=32个方向。按序排列即可找到。

  1. /* 3220 */
  2. #include <iostream>
  3. #include <queue>
  4. #include <algorithm>
  5. #include <cstdio>
  6. #include <cstring>
  7. using namespace std;
  8.  
  9. char visit[<<];
  10. const int end = 0x0ff;
  11. int beg;
  12. int dir[][] = {
  13. ,, ,, ,, ,,
  14. ,, ,, ,,
  15. ,, ,, ,,
  16. ,, ,,
  17. ,, ,, ,,
  18. ,, ,,
  19. ,, ,,
  20. ,,
  21. ,, ,, ,,
  22. ,, ,,
  23. ,, ,,
  24. ,,
  25. ,, ,,
  26. ,,
  27. ,
  28. };
  29.  
  30. void bfs() {
  31. int i, j, k, tmp;
  32. queue<int> Q;
  33. int a, b, s;
  34. char t;
  35.  
  36. memset(visit, -, sizeof(visit));
  37. visit[end] = ;
  38. Q.push(end);
  39.  
  40. while (!Q.empty()) {
  41. s = Q.front();
  42. Q.pop();
  43. t = visit[s];
  44. if (t >= )
  45. continue;
  46. ++t;
  47. for (i=; i<; ++i) {
  48. a = s & (<<dir[i][]);
  49. b = s & (<<dir[i][]);
  50. if (a ^ b) {
  51. tmp = (s ^ (<<dir[i][])) ^ (<<dir[i][]);
  52. if (visit[tmp] < ) {
  53. visit[tmp] = t;
  54. Q.push(tmp);
  55. }
  56. }
  57. }
  58. }
  59. }
  60.  
  61. void init() {
  62. int i;
  63.  
  64. for (i=; i<; ++i) {
  65. --dir[i][];
  66. --dir[i][];
  67. }
  68.  
  69. bfs();
  70. }
  71.  
  72. int main() {
  73. int t, tt;
  74. int i, j, k;
  75.  
  76. #ifndef ONLINE_JUDGE
  77. freopen("data.in", "r", stdin);
  78. freopen("data.out", "w", stdout);
  79. #endif
  80.  
  81. init();
  82. scanf("%d", &tt);
  83. for (t=; t<=tt; ++t) {
  84. beg = ;
  85. for (i=; i>=; --i) {
  86. scanf("%d", &j);
  87. if (j)
  88. beg |= (<<i);
  89. }
  90. k = visit[beg];
  91. if (k < )
  92. printf("Case #%d: more\n", t);
  93. else
  94. printf("Case #%d: %d\n", t, k);
  95. }
  96.  
  97. return ;
  98. }

【HDOJ】3220 Alice’s Cube的更多相关文章

  1. 【HDOJ】4122 Alice's mooncake shop

    RMQ的基础题目,简单题. /* 4122 */ #include <iostream> #include <sstream> #include <string> ...

  2. 【HDOJ】3660 Alice and Bob's Trip

    就是一个基本的dfs.可关键问题是c/c++/g++光输入就超时了.还是写java过的,毕竟时限4s.都放弃希望了,没想到还真过了. import java.lang.*; import java.i ...

  3. 【HDOJ】3309 Roll The Cube

    BFS,考虑一球进洞仅一球滚动以及两球重叠的情况即可. /* 3309 */ #include <iostream> #include <queue> #include < ...

  4. 【HDOJ】4801 Pocket Cube 的几种解法和优化

    1. 题目描述给定一个$2 \times 2 \times 2$的魔方,当某个面上的4个小块颜色均相同时,称这个面为complete.求对这个魔方进行$n \in [1,7]$次旋转(沿某个面顺时针或 ...

  5. 【HDOJ】3584 Cube

    三位树状数组. /* 3584 */ #include <iostream> #include <string> #include <map> #include & ...

  6. 【HDOJ】4729 An Easy Problem for Elfness

    其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...

  7. 【转】Kylin中的cube构建

    http://blog.csdn.net/yu616568/article/details/50365240 前言   在使用Kylin的时候,最重要的一步就是创建cube的模型定义,即指定度量和维度 ...

  8. 【HDOJ】【3506】Monkey Party

    DP/四边形不等式 裸题环形石子合并…… 拆环为链即可 //HDOJ 3506 #include<cmath> #include<vector> #include<cst ...

  9. 【HDOJ】【3516】Tree Construction

    DP/四边形不等式 这题跟石子合并有点像…… dp[i][j]为将第 i 个点开始的 j 个点合并的最小代价. 易知有 dp[i][j]=min{dp[i][j] , dp[i][k-i+1]+dp[ ...

随机推荐

  1. WCF - 序列化

    数据是信息的载体 在不同环境中有不同的类型 为保证处于不同平台的的应用能够正常的进行数据交互 必须采用一种双方都能理解的数据类型 XML无疑是最好的选择 但不是唯一的选择 例如JSON也是一种普遍认可 ...

  2. Charles --- Mac 抓包工具

    安装 官方网站Charles 是一款收费软件,可以免费体验30天.网上有破解版. 使用 infoq 上有一篇很棒的教程:iOS开发工具——网络封包分析工具Charles 注意事项 这是我使用过程中遇到 ...

  3. shell脚本实现冒泡排序 分类: 学习笔记 linux ubuntu 2015-07-10 14:16 79人阅读 评论(0) 收藏

    手动输入一行字符串,并对其排序. 脚本如下: #!/bin/bash #a test about sort echo "please input a number list" re ...

  4. js 的post提交的写法

    function AddEditDevice(data){ var form = $("#deviceEditform"); if (form.length == 0) { for ...

  5. super() extends() private总结demo

    public class TestService { private String name; public TestService(String name) { this.name=name; } ...

  6. 详解SQL Server 2005 Express下的事件探查器

    安装Visual Studio 2008会有附带的SQL Server 2005 Express版 我们开发一般都用那个都不单独安装SQL Server的 大家都知道express版的sql是没有 事 ...

  7. 解决Xcode7多个模拟器的方法

    xcode模拟器都这样显示,没办法判断是哪个系统,解决办法是 1.关闭xcode 2.终端输入 sudo killall -9 com.apple.CoreSimulator.CoreSimulato ...

  8. 子树大小平衡树(Size Balanced Tree,SBT)操作模板及杂谈

    基础知识(包括但不限于:二叉查找树是啥,SBT又是啥反正又不能吃,平衡树怎么旋转,等等)在这里就不(lan)予(de)赘(duo)述(xie)了. 先贴代码(数组模拟): int seed; int ...

  9. 获取C++类成员变量的地址偏移

    今天有在校学生问怎么获取类中的成员变量的地址偏移量,这个应该是很多初学C++的人很好奇的问题.以前我在学校的时候,也有过这种需求.忘了当时是要写什么“奇怪的程序”了,反正需要获取一个类的成员变量的地址 ...

  10. 【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询

    Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...