hdu 4801模拟题
/*
模拟;
注意:实质上一次魔方的一半要变化
用c++超内存
用g++过了
*/
#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
struct node
{
int f0[4],f4[4],f6[4],f8[4],f16[4],f20[4];
int step;
} s,next;
int fnow[10000][6];
int kk(int f[4])
{
if(f[0]==f[1]&&f[1]==f[2]&&f[2]==f[3])
return 1;
return 0;
}
int comp(struct node ss)//计算有几个面是同色
{
int sum=0;
sum+=kk(ss.f0);
sum+=kk(ss.f4);
sum+=kk(ss.f6);
sum+=kk(ss.f8);
sum+=kk(ss.f16);
sum+=kk(ss.f20);
return sum;
}
void clock(int f[4],int fd[4])//顺时针旋转
{
f[0]=fd[2];
f[2]=fd[3];
f[3]=fd[1];
f[1]=fd[0];
return ;
}
void clockfan(int f[4],int fd[4])//逆时针旋转
{
f[0]=fd[1];
f[1]=fd[3];
f[3]=fd[2];
f[2]=fd[0];
return ;
}
void Switch(struct node s,int k)//6种旋转方式
{
if(k==0)
{
next.f0[0]=s.f20[0];
next.f0[2]=s.f20[2];
next.f6[0]=s.f0[0];
next.f6[2]=s.f0[2];
next.f16[0]=s.f6[0];
next.f16[2]=s.f6[2];
next.f20[0]=s.f16[0];
next.f20[2]=s.f16[2];
clock(next.f4,s.f4);//要变化
}
if(k==1)
{
next.f20[0]=s.f0[0];
next.f20[2]=s.f0[2];
next.f0[0]=s.f6[0];
next.f0[2]=s.f6[2];
next.f6[0]=s.f16[0];
next.f6[2]=s.f16[2];
next.f16[0]=s.f20[0];
next.f16[2]=s.f20[2];
clockfan(next.f4,s.f4);//要变化
}
if(k==2)
{
next.f4[0]=s.f6[0];
next.f4[1]=s.f6[1];
next.f20[2]=s.f4[1];
next.f20[3]=s.f4[0];
next.f8[0]=s.f20[3];
next.f8[1]=s.f20[2];
next.f6[0]=s.f8[0];
next.f6[1]=s.f8[1];
clock(next.f0,s.f0);
}
if(k==3)
{
next.f6[0]=s.f4[0];
next.f6[1]=s.f4[1];
next.f4[0]=s.f20[3];
next.f4[1]=s.f20[2];
next.f20[3]=s.f8[0];
next.f20[2]=s.f8[1];
next.f8[0]=s.f6[0];
next.f8[1]=s.f6[1];
clockfan(next.f0,s.f0);
}
if(k==4)
{
next.f0[2]=s.f8[0];
next.f0[3]=s.f8[2];
next.f4[1]=s.f0[3];
next.f4[3]=s.f0[2];
next.f16[0]=s.f4[1];
next.f16[1]=s.f4[3];
next.f8[0]=s.f16[1];
next.f8[2]=s.f16[0];
clockfan(next.f6,s.f6);
}
if(k==5)
{
next.f8[0]=s.f0[2];
next.f8[2]=s.f0[3];
next.f0[3]=s.f4[1];
next.f0[2]=s.f4[3];
next.f4[1]=s.f16[0];
next.f4[3]=s.f16[1];
next.f16[1]=s.f8[0];
next.f16[0]=s.f8[2];
clock(next.f6,s.f6);
}
}
int n,len;
void chh(int &f,int fd[4])
{
f=fd[3];
f=f*6+fd[2];
f=f*6+fd[1];
f=f*6+fd[0];
return ;
}
void fswitch(struct node s,int kf[6])
{
chh(kf[0],s.f0);
chh(kf[1],s.f4);
chh(kf[2],s.f6);
chh(kf[3],s.f8);
chh(kf[4],s.f16);
chh(kf[5],s.f20);
return ;
}
void bfs(struct node s)
{
int j,k,maxx;
struct node cur;
maxx=comp(s);
s.step=0;
len=0;
queue<node>q;
q.push(s);
while(!q.empty())
{
cur=q.front();
q.pop();
if(cur.step>=n)continue;
for(k=0; k<6; k++)
{
next=cur;
Switch(cur,k);
j=comp(next);
next.step++;
q.push(next);
if(j>maxx)
maxx=j;
if(maxx==6)break;
}
if(maxx==6)break;
}
printf("%d\n",maxx);
return ;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
scanf("%d%d%d%d",&s.f0[0],&s.f0[1],&s.f0[2],&s.f0[3]);
scanf("%d%d%d%d",&s.f4[0],&s.f4[1],&s.f6[0],&s.f6[1]);
scanf("%d%d%d%d",&s.f8[0],&s.f8[1],&s.f4[2],&s.f4[3]);
scanf("%d%d%d%d",&s.f6[2],&s.f6[3],&s.f8[2],&s.f8[3]);
scanf("%d%d%d%d",&s.f16[0],&s.f16[1],&s.f16[2],&s.f16[3]);
scanf("%d%d%d%d",&s.f20[0],&s.f20[1],&s.f20[2],&s.f20[3]);
bfs(s);
}
return 0;
}
hdu 4801模拟题的更多相关文章
- HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)
HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...
- HDU 4452 Running Rabbits (模拟题)
题意: 有两只兔子,一只在左上角,一只在右上角,两只兔子有自己的移动速度(每小时),和初始移动方向. 现在有3种可能让他们转向:撞墙:移动过程中撞墙,掉头走未完成的路. 相碰: 两只兔子在K点整(即处 ...
- hdu 5641 King's Phone(暴力模拟题)
Problem Description In a military parade, the King sees lots of new things, including an Andriod Pho ...
- HDU 1262 寻找素数对 模拟题
题目描述:输入一个偶数,判断这个偶数可以由哪两个差值最小的素数相加,输出这两个素数. 题目分析:模拟题,注意的是为了提高效率,在逐个进行判断时,只要从2判断到n/2就可以了,并且最好用打表法判断素数. ...
- HDU 2093 考试排名 模拟题
解题报告: 题目描述:写一个程序给一个编程考试C++实时提交系统排名,给你的数据是题目的总数,每次错误提交罚的时间分,每位用户的姓名,然后是输入用户每题的完成情况,有一下几种情况,第一,输入只有一个正 ...
- hdu 4706:Children's Day(模拟题,模拟输出大写字母 N)
Children's Day Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU 2414 Chessboard Dance(模拟题,仅此纪念我的堕落)
题目 模拟题也各种wa,我最近真的堕落了,,,,,智商越来越为负数了!!!!!!!! #include<stdio.h> #include<string.h> #include ...
- poj 1008:Maya Calendar(模拟题,玛雅日历转换)
Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 64795 Accepted: 19978 D ...
- poj 1888 Crossword Answers 模拟题
Crossword Answers Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 869 Accepted: 405 D ...
随机推荐
- jQuery将json字符串显示在页面上
js代码: function syntaxHighlight(json) { if (typeof json != 'string') { json = JSON.stringify(json, un ...
- Python3 写入文件
Demo: file = open("test.txt", "wb")file.write("string") 上面这段代码运行会报类型错误 ...
- 用JS检测页面加载的不同阶段状态
这可以通过用document.onreadystatechange的方法来监听状态改变, 然后用document.readyState == “complete”判断是否加载完成. 可以采用2个div ...
- 纯手写的css3正方体旋转效果
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- PHP08 数组和数据结构
学习要点 数组的分类 数组的定义 数组的遍历 预定义数组 数组的相关处理函数 PHP操作数组需要注意的细节 数组的分类 关于PHP数组 由于PHP是弱类型的编程语言,所以PHP数组中的数组变量可以存储 ...
- 日常[splay]:水题记——营业额统计
没错这就是让我深陷splay之中的罪魁祸首,昨天打了一下午结果发现是玄学错误的那个 人生第一棵splay平衡树 题目大意:求一段序列,小于当前元素的最大值和大于当前元素的最小值.从该元素前面的元素找. ...
- PHP100视频教程-->视频下载
链接:https://pan.baidu.com/s/14tbX1rz3hYSKY6k0T6WVzg提取码:kypy PHP是一种目前最流行的服务端Web程序开发语言之一.PHP主要的特点是语法简单易 ...
- 基于HLS(HTTP Live Streaming)的视频直播分析与实现
转自:http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html HLS(HTTP Live Streaming)的分析: HTT ...
- react-native 在新版Xcode(10+)中运行出现的问题: node_modules/react-native/third-party/glog-0.3.4 , C compiler cannot create executables
报错发生在 react-native : 0.55.4 (或存在于更低的版本) 报错: ----/node_modules/react-native/third-party/glog-0.3.4': ...
- luogu P3393 逃离僵尸岛-搜索剪枝+spfa
P3393 逃离僵尸岛 题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被 ...