【HDOJ】3220 Alice’s Cube
状态压缩+逆向BFS。
方向数组就是任意相邻的两点(初始化时减1),每个顶点均有4个相邻点。因此,共有16*4/2=32个方向。按序排列即可找到。
- /* 3220 */
- #include <iostream>
- #include <queue>
- #include <algorithm>
- #include <cstdio>
- #include <cstring>
- using namespace std;
- char visit[<<];
- const int end = 0x0ff;
- int beg;
- int dir[][] = {
- ,, ,, ,, ,,
- ,, ,, ,,
- ,, ,, ,,
- ,, ,,
- ,, ,, ,,
- ,, ,,
- ,, ,,
- ,,
- ,, ,, ,,
- ,, ,,
- ,, ,,
- ,,
- ,, ,,
- ,,
- ,
- };
- void bfs() {
- int i, j, k, tmp;
- queue<int> Q;
- int a, b, s;
- char t;
- memset(visit, -, sizeof(visit));
- visit[end] = ;
- Q.push(end);
- while (!Q.empty()) {
- s = Q.front();
- Q.pop();
- t = visit[s];
- if (t >= )
- continue;
- ++t;
- for (i=; i<; ++i) {
- a = s & (<<dir[i][]);
- b = s & (<<dir[i][]);
- if (a ^ b) {
- tmp = (s ^ (<<dir[i][])) ^ (<<dir[i][]);
- if (visit[tmp] < ) {
- visit[tmp] = t;
- Q.push(tmp);
- }
- }
- }
- }
- }
- void init() {
- int i;
- for (i=; i<; ++i) {
- --dir[i][];
- --dir[i][];
- }
- bfs();
- }
- int main() {
- int t, tt;
- int i, j, k;
- #ifndef ONLINE_JUDGE
- freopen("data.in", "r", stdin);
- freopen("data.out", "w", stdout);
- #endif
- init();
- scanf("%d", &tt);
- for (t=; t<=tt; ++t) {
- beg = ;
- for (i=; i>=; --i) {
- scanf("%d", &j);
- if (j)
- beg |= (<<i);
- }
- k = visit[beg];
- if (k < )
- printf("Case #%d: more\n", t);
- else
- printf("Case #%d: %d\n", t, k);
- }
- return ;
- }
【HDOJ】3220 Alice’s Cube的更多相关文章
- 【HDOJ】4122 Alice's mooncake shop
RMQ的基础题目,简单题. /* 4122 */ #include <iostream> #include <sstream> #include <string> ...
- 【HDOJ】3660 Alice and Bob's Trip
就是一个基本的dfs.可关键问题是c/c++/g++光输入就超时了.还是写java过的,毕竟时限4s.都放弃希望了,没想到还真过了. import java.lang.*; import java.i ...
- 【HDOJ】3309 Roll The Cube
BFS,考虑一球进洞仅一球滚动以及两球重叠的情况即可. /* 3309 */ #include <iostream> #include <queue> #include < ...
- 【HDOJ】4801 Pocket Cube 的几种解法和优化
1. 题目描述给定一个$2 \times 2 \times 2$的魔方,当某个面上的4个小块颜色均相同时,称这个面为complete.求对这个魔方进行$n \in [1,7]$次旋转(沿某个面顺时针或 ...
- 【HDOJ】3584 Cube
三位树状数组. /* 3584 */ #include <iostream> #include <string> #include <map> #include & ...
- 【HDOJ】4729 An Easy Problem for Elfness
其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...
- 【转】Kylin中的cube构建
http://blog.csdn.net/yu616568/article/details/50365240 前言 在使用Kylin的时候,最重要的一步就是创建cube的模型定义,即指定度量和维度 ...
- 【HDOJ】【3506】Monkey Party
DP/四边形不等式 裸题环形石子合并…… 拆环为链即可 //HDOJ 3506 #include<cmath> #include<vector> #include<cst ...
- 【HDOJ】【3516】Tree Construction
DP/四边形不等式 这题跟石子合并有点像…… dp[i][j]为将第 i 个点开始的 j 个点合并的最小代价. 易知有 dp[i][j]=min{dp[i][j] , dp[i][k-i+1]+dp[ ...
随机推荐
- WCF - 序列化
数据是信息的载体 在不同环境中有不同的类型 为保证处于不同平台的的应用能够正常的进行数据交互 必须采用一种双方都能理解的数据类型 XML无疑是最好的选择 但不是唯一的选择 例如JSON也是一种普遍认可 ...
- Charles --- Mac 抓包工具
安装 官方网站Charles 是一款收费软件,可以免费体验30天.网上有破解版. 使用 infoq 上有一篇很棒的教程:iOS开发工具——网络封包分析工具Charles 注意事项 这是我使用过程中遇到 ...
- shell脚本实现冒泡排序 分类: 学习笔记 linux ubuntu 2015-07-10 14:16 79人阅读 评论(0) 收藏
手动输入一行字符串,并对其排序. 脚本如下: #!/bin/bash #a test about sort echo "please input a number list" re ...
- js 的post提交的写法
function AddEditDevice(data){ var form = $("#deviceEditform"); if (form.length == 0) { for ...
- super() extends() private总结demo
public class TestService { private String name; public TestService(String name) { this.name=name; } ...
- 详解SQL Server 2005 Express下的事件探查器
安装Visual Studio 2008会有附带的SQL Server 2005 Express版 我们开发一般都用那个都不单独安装SQL Server的 大家都知道express版的sql是没有 事 ...
- 解决Xcode7多个模拟器的方法
xcode模拟器都这样显示,没办法判断是哪个系统,解决办法是 1.关闭xcode 2.终端输入 sudo killall -9 com.apple.CoreSimulator.CoreSimulato ...
- 子树大小平衡树(Size Balanced Tree,SBT)操作模板及杂谈
基础知识(包括但不限于:二叉查找树是啥,SBT又是啥反正又不能吃,平衡树怎么旋转,等等)在这里就不(lan)予(de)赘(duo)述(xie)了. 先贴代码(数组模拟): int seed; int ...
- 获取C++类成员变量的地址偏移
今天有在校学生问怎么获取类中的成员变量的地址偏移量,这个应该是很多初学C++的人很好奇的问题.以前我在学校的时候,也有过这种需求.忘了当时是要写什么“奇怪的程序”了,反正需要获取一个类的成员变量的地址 ...
- 【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...