HDU 4801 Pocket Cube
去年现场,虎哥1Y的,现在刷刷题,找找状态...
一共6种转法,把3个面放到顶部,左旋和右旋,感觉写的还不错....都写成常数了。
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <queue>
#include <algorithm>
#define LL long long
using namespace std;
struct node
{
int num[];
int st;
};
int dr[] = {,,,,,,,,,,,};
int dc[] = {,,,,,,,,,,,};
int a[] = {,,,,,,,,,,,};
int b[] = {,,,,,,,,,,,};
int c[] = {,,,,,,,,,,,};
int aim[][] = {
{,,,},
{,,,},
{,,,},
{,,,},
{,,,},
{,,,}
};
int judge(int *p)
{
int ans = ,i,j;
for(i = ;i < ;i ++)
{
for(j = ;j < ;j ++)
{
if(p[aim[i][j]] != p[aim[i][]])
break;
}
if(j == ) ans ++;
}
return ans;
}
int main()
{
node u,v;
int n,i,ans;
while(scanf("%d",&n)!=EOF)
{
for(i = ;i < ;i ++)
{
scanf("%d",&u.num[i]);
}
u.st = ;
queue<node>que;
que.push(u);
ans = ;
while(!que.empty())
{
u = que.front();
que.pop();
if(ans == ) break;
ans = max(ans,judge(u.num));
if(u.st == n) continue;
v.st = u.st + ;
//a
for(i = ;i < ;i ++)
{
v.num[i] = u.num[i];
}
for(i = ;i < ;i ++)
{
v.num[a[dr[i]]] = u.num[a[i]];
}
que.push(v);
for(i = ;i < ;i ++)
{
v.num[a[dc[i]]] = u.num[a[i]];
}
que.push(v);
//b
for(i = ;i < ;i ++)
{
v.num[i] = u.num[i];
}
for(i = ;i < ;i ++)
{
v.num[b[dr[i]]] = u.num[b[i]];
}
que.push(v);
for(i = ;i < ;i ++)
{
v.num[b[dc[i]]] = u.num[b[i]];
}
que.push(v);
//c
for(i = ;i < ;i ++)
{
v.num[i] = u.num[i];
}
for(i = ;i < ;i ++)
{
v.num[c[dr[i]]] = u.num[c[i]];
}
que.push(v);
for(i = ;i < ;i ++)
{
v.num[c[dc[i]]] = u.num[c[i]];
}
que.push(v);
}
printf("%d\n",ans);
}
return ;
}
HDU 4801 Pocket Cube的更多相关文章
- HDU 5292 Pocket Cube 结论题
Pocket Cube 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5292 Description Pocket Cube is the 2×2× ...
- 【HDOJ】4801 Pocket Cube 的几种解法和优化
1. 题目描述给定一个$2 \times 2 \times 2$的魔方,当某个面上的4个小块颜色均相同时,称这个面为complete.求对这个魔方进行$n \in [1,7]$次旋转(沿某个面顺时针或 ...
- 2013区域赛长沙赛区现场赛 K - Pocket Cube
K - Pocket Cube Time Limit:10000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Su ...
- Pocket Cube
Pocket Cube http://acm.hdu.edu.cn/showproblem.php?pid=5983 Time Limit: 2000/1000 MS (Java/Others) ...
- 【】【】Pocket Cube
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s) ...
- 2013 ACM区域赛长沙 K Pocket Cube hdu 4801
题意:给了一个2*2的魔方..每步操作可以将任意一面翻转90度..现在问在N(<=7)步内.最多能翻出几面相同的. 直接打表模拟每种翻转情况 #include<cstdio> #in ...
- HDU 1220 B - Cube
http://acm.hdu.edu.cn/showproblem.php?pid=1220 一开始的做法是,先暴力算出一个面,就是n * n的面,能有多少对.记作face 然后从上开始算下来,最上一 ...
- hdu 3547 DIY Cube (Ploya定理)
DIY Cube Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total S ...
- 模拟 ZOJ 3736 Pocket Cube
题目传送门 题意:魔方最多旋转n次,问最多能使多少面颜色相同 分析:6种状态(3种旋转方式*顺逆方向,其他对称的!),首先先打个表,然后很愉快的DFS.自己写的时候费劲脑汁,代码很长,还TLE了... ...
随机推荐
- word20161216
object / 对象 object identifier / 对象标识符 offline / 脱机 OLE on-disk catalog / 磁盘目录 on-media catalog / 媒体 ...
- typeScence
- Python之str()与repr()的区别
Python之str()与repr()的区别 str()一般是将数值转成字符串,主要面向用户. repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思.如list, ...
- iOS delegate
有两个scene,分别为Scene A和Scene B.Scene A上有一个UIButton(Button A)和一个UILable(Lable A):Scene B上有一个UITextFiled( ...
- C/C++: C++可调用对象详解
C++中有几种可调用对象:函数,函数指针,lambda表达式,bind创建的对象,以及重载了函数调用符的类. 1. 函数 函数偏基础的东西,在这里不再叙述.重点讲下C++11的某些重要特性和函数指针. ...
- express中的路由
一.读取静态文件 基本代码: "use strict"; const express = require("express"); let app = expre ...
- javascript 核心语言笔记 4 - 表达式和运算符
表达式(expression)是 JavaScript 中的一个短语(phrases),JavaScript 解释器会将其计算(evaluate)出一个结果.程序中的常量.变量名.数组访问等都是表达式 ...
- ajax+php+mysql 实现点赞、局部刷新,每个IP只能对一篇文章点赞一次
主要流程: 点赞—>判断当前设备IP是否对当前文章有过点赞记录—>若有记录,弹出提示“已经赞过了”; 若无记录,当前文章点赞数+1,并在记录设备IP点赞记录的表中插入信息. 文章表 art ...
- XStream xml 解析框架使用笔记
1. xml的标签可以映射为类.类成员变量 2. 有子标签的标签映射为类,没有子标签的便签映射为类成员变量 3. 类名.类成员变量名如与标签名不一致需要通过注解或代码设置别名 // 类名 @XStre ...
- zsh 自动补全导致命令显示重复
关键字:autocomplete, zsh, backspace, securecrt, xterm, linux console 举个例子: 输入命令ls 然后按TAB补全试试,发现竟然是这样的 ...