题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4397
2012年多校 第10场,1008。
模拟题。
比赛刚开始就开始敲,敲了一个小时敲好了,交上去WA。
于是整个比赛就在调试与纠结中度过。 木有心情做其它题了。。。竟然连模拟都过不了。。。
期间怪叔叔各种帮查数据和代码,木有错。
赛后看了题解,仍然不知道错在神马地方。。。
后来突然想到了,我遗漏一个点,魔方转动是三个颜色一起动的,而我只针对其中一种颜色去模拟,各种纠结。。。
改了就过了。。。 代码有点搓比。。。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<map>
#include<vector>
using namespace std;
int f[10][13],g[10][13];
void init_(){
int i,j;
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
f[i][j]=0;
for(i=1;i<=3;i++)
for(j=4;j<=6;j++)
f[i][j]=1;
for(i=1;i<=3;i++)
for(j=7;j<=12;j++)
f[i][j]=0;
for(i=4;i<=6;i++)
for(j=1;j<=3;j++)
f[i][j]=2;
for(i=4;i<=6;i++)
for(j=4;j<=6;j++)
f[i][j]=3;
for(i=4;i<=6;i++)
for(j=7;j<=9;j++)
f[i][j]=4;
for(i=4;i<=6;i++)
for(j=10;j<=12;j++)
f[i][j]=5;
for(i=7;i<=9;i++)
for(j=1;j<=3;j++)
f[i][j]=0;
for(i=7;i<=9;i++)
for(j=4;j<=6;j++)
f[i][j]=6;
for(i=7;i<=9;i++)
for(j=7;j<=12;j++)
f[i][j]=0;
/*
for(i=1;i<=9;i++){
for(j=1;j<=12;j++)
printf("%d ",f[i][j]);
printf("\n");
}
*/
}
char op[2000];
void fU(){
int tmp,j,t=3;
while(t--){
tmp=g[4][1];
for(j=1;j<=11;j++)
g[4][j]=g[4][j+1];
g[4][12]=tmp;
}
t=2;
while(t--){
tmp=g[1][4];
g[1][4]=g[2][4];
g[2][4]=g[3][4];
g[3][4]=g[3][5];
g[3][5]=g[3][6];
g[3][6]=g[2][6];
g[2][6]=g[1][6];
g[1][6]=g[1][5];
g[1][5]=tmp;
}
}
void fu(){
int t=3;
while(t--) fU();
}
void fD(){
int tmp,j,t=3;
while(t--){
tmp=g[6][12];
for(j=12;j>=2;j--)
g[6][j]=g[6][j-1];
g[6][1]=tmp;
}
t=2;
while(t--){
tmp=g[7][4];
g[7][4]=g[8][4];
g[8][4]=g[9][4];
g[9][4]=g[9][5];
g[9][5]=g[9][6];
g[9][6]=g[8][6];
g[8][6]=g[7][6];
g[7][6]=g[7][5];
g[7][5]=tmp;
}
}
void fd(){
int t=3;
while(t--) fD();
}
void fR(){
int tmp,i,t=3;
while(t--){
tmp=g[1][6];
for(i=1;i<=8;i++)
g[i][6]=g[i+1][6];
g[9][6]=g[6][10];
g[6][10]=g[5][10];
g[5][10]=g[4][10];
g[4][10]=tmp;
}
t=2;
while(t--){
tmp=g[4][7];
g[4][7]=g[5][7];
g[5][7]=g[6][7];
g[6][7]=g[6][8];
g[6][8]=g[6][9];
g[6][9]=g[5][9];
g[5][9]=g[4][9];
g[4][9]=g[4][8];
g[4][8]=tmp;
}
}
void fr(){
int t=3;
while(t--) fR();
}
void fL(){
int tmp,i,t=3;
while(t--){
tmp=g[9][4];
for(i=9;i>=2;i--)
g[i][4]=g[i-1][4];
g[1][4]=g[4][12];
g[4][12]=g[5][12];
g[5][12]=g[6][12];
g[6][12]=tmp;
}
t=2;
while(t--){
tmp=g[4][1];
g[4][1]=g[5][1];
g[5][1]=g[6][1];
g[6][1]=g[6][2];
g[6][2]=g[6][3];
g[6][3]=g[5][3];
g[5][3]=g[4][3];
g[4][3]=g[4][2];
g[4][2]=tmp;
}
}
void fl(){
int t=3;
while(t--) fL();
}
void ff(){
int tmp,t=3;
while(t--){
tmp=g[3][4];
g[3][4]=g[3][5];
g[3][5]=g[3][6];
g[3][6]=g[4][7];
g[4][7]=g[5][7];
g[5][7]=g[6][7];
g[6][7]=g[7][6];
g[7][6]=g[7][5];
g[7][5]=g[7][4];
g[7][4]=g[6][3];
g[6][3]=g[5][3];
g[5][3]=g[4][3];
g[4][3]=tmp;
}
t=2;
while(t--){
tmp=g[4][4];
g[4][4]=g[4][5];
g[4][5]=g[4][6];
g[4][6]=g[5][6];
g[5][6]=g[6][6];
g[6][6]=g[6][5];
g[6][5]=g[6][4];
g[6][4]=g[5][4];
g[5][4]=tmp;
}
}
void fF(){
int t=3;
while(t--) ff();
}
void fB(){
int tmp,t=3;
while(t--){
tmp=g[1][4];
g[1][4]=g[1][5];
g[1][5]=g[1][6];
g[1][6]=g[4][9];
g[4][9]=g[5][9];
g[5][9]=g[6][9];
g[6][9]=g[9][6];
g[9][6]=g[9][5];
g[9][5]=g[9][4];
g[9][4]=g[6][1];
g[6][1]=g[5][1];
g[5][1]=g[4][1];
g[4][1]=tmp;
}
t=2;
while(t--){
tmp=g[4][10];
g[4][10]=g[5][10];
g[5][10]=g[6][10];
g[6][10]=g[6][11];
g[6][11]=g[6][12];
g[6][12]=g[5][12];
g[5][12]=g[4][12];
g[4][12]=g[4][11];
g[4][11]=tmp;
}
}
void fb(){
int t=3;
while(t--) fB();
}
void fx(){
int tmp,j,t=3;
while(t--){
tmp=g[5][12];
for(j=12;j>=2;j--)
g[5][j]=g[5][j-1];
g[5][1]=tmp;
}
}
void fX(){
int tmp,j,t=3;
while(t--){
tmp=g[5][1];
for(j=1;j<=11;j++)
g[5][j]=g[5][j+1];
g[5][12]=tmp;
}
}
void fY(){
int tmp,i,t=3;
while(t--){
tmp=g[1][5];
for(i=1;i<=8;i++)
g[i][5]=g[i+1][5];
g[9][5]=g[6][11];
g[6][11]=g[5][11];
g[5][11]=g[4][11];
g[4][11]=tmp;
}
}
void fy(){
int tmp,i,t=3;
while(t--){
tmp=g[9][5];
for(i=9;i>=2;i--)
g[i][5]=g[i-1][5];
g[1][5]=g[4][11];
g[4][11]=g[5][11];
g[5][11]=g[6][11];
g[6][11]=tmp;
}
}
void fZ(){
int tmp,t=3;
while(t--){
tmp=g[2][4];
g[2][4]=g[2][5];
g[2][5]=g[2][6];
g[2][6]=g[4][8];
g[4][8]=g[5][8];
g[5][8]=g[6][8];
g[6][8]=g[8][6];
g[8][6]=g[8][5];
g[8][5]=g[8][4];
g[8][4]=g[6][2];
g[6][2]=g[5][2];
g[5][2]=g[4][2];
g[4][2]=tmp;
}
}
void fz(){
int t=3;
while(t--) fZ();
}
int res(){
int i,j;
for(i=1;i<=3;i++)
for(j=4;j<=6;j++)
if(g[i][j]!=g[1][4]) return 0;
for(i=4;i<=6;i++)
for(j=1;j<=3;j++)
if(g[i][j]!=g[4][1]) return 0;
for(i=4;i<=6;i++)
for(j=4;j<=6;j++)
if(g[i][j]!=g[4][4]) return 0;
for(i=4;i<=6;i++)
for(j=7;j<=9;j++)
if(g[i][j]!=g[4][7]) return 0;
for(i=4;i<=6;i++)
for(j=10;j<=12;j++)
if(g[i][j]!=g[4][10]) return 0;
for(i=7;i<=9;i++)
for(j=4;j<=6;j++)
if(g[i][j]!=g[7][4]) return 0;
return 1;
}
void debug(){
int i,j;
int k[9]={0};
for(i=1;i<=9;i++)
for(j=1;j<=12;j++)
k[g[i][j]]++;
for(i=1;i<=6;i++)
if(k[i]!=9) while(1);
}
int can(){
int i,j,k;
for(i=0;op[i];i++){
if(op[i]=='U') fU();
else if(op[i]=='u') fu();
else if(op[i]=='D') fD();
else if(op[i]=='d') fd();
else if(op[i]=='R') fR();
else if(op[i]=='r') fr();
else if(op[i]=='L') fL();
else if(op[i]=='l') fl();
else if(op[i]=='F') fF();
else if(op[i]=='f') ff();
else if(op[i]=='B') fB();
else if(op[i]=='b') fb();
else if(op[i]=='X') fX();
else if(op[i]=='x') fx();
else if(op[i]=='Y') fY();
else if(op[i]=='y') fy();
else if(op[i]=='Z') fZ();
else if(op[i]=='z') fz();
else while(1) puts("fuck!");
}
/*
for(i=1;i<=9;i++){
for(j=1;j<=12;j++)
printf("%d ",g[i][j]);
printf("\n");
}
debug();
*/
// return res();
for(i=1;i<=9;i++)
for(j=1;j<=12;j++)
if(f[i][j]!=g[i][j]) return 0;
return 1;
}
void cpy(){
int i,j;
for(i=1;i<=9;i++)
for(j=1;j<=12;j++)
g[i][j]=f[i][j];
}
int main(){
int flag=0;
init_();
while(~scanf("%s",op)){
cpy();
if(flag!=0) puts("");
else flag=1;
if(can()) puts("Yes");
else puts("No");
}
return 0;
}
/*
buBubuuBbuBubuuBbuBubuuBbuBubuuBbuBubuuBbuBubuuBuU
ldLdlddLldLdlddLldLdlddLldLdlddLldLdlddLldLdlddL
*/