Description

  Gandtom把家搬到了一个交通便利的地方。今天来通知他的朋友Sidney,但是Sidney好像不在家,出门了,敲门没有人开门。 
  于是Gandtom把家里的地址写了下来。他担心别人看到了这张纸条,于是就把这个纸条塞到了一个魔方里,并且留下了一个式子。如果Sidney能照着式子将魔方复原,就能打开魔方,得到Gandtom的新住址。 
  众所周知,一个三阶魔方共有72种旋转方式,分述如图1。 
   
  给一个字符串,代表式子。该字符串仅包含                     等二十二个字符。不存在的子串。最多只有一层括号。 
  我们将图2的魔方展开成图3的样子,并对图3位置进行编号,以便用字符串表示魔方。 
    
  用于表示魔方的字符串仅包含下列字母:-黄、-橙、-蓝、-红、-绿、-白,且一定是个可复原的魔方。该字符串表示位置的颜色为。例如,字符串即代表了图3。 
  试求魔方经过式子能否被复原。

Input

第一行有一个整数,表示组数。 
每组数据第一行有一个字符串。 
每组数据第二行有一个字符串。

Output

每组数据输出一行。 
如果魔方能复原输出""(不含引号)。 
否则输出""(不含引号)。

Sample Input


YYYYYYYYYGGGOOOBBBRRROOOBBBRRRGGGOOOBBBRRRGGGWWWWWWWWW 

YYYYYYYYYGGGOOOBBBRRROOOBBBRRRGGGOOOBBBRRRGGGWWWWWWWWW 
(U'U2U'2)2(U')

Sample Output

YES 
YES

思路:

没啥好说的,就是模拟,有部分操作可以由其余的操作演变而来,不需要重复写

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
char a[100],op[1000];
void sup(int aa,int b,int c,int d){char temp=a[aa];a[aa]=a[b];a[b]=a[c];a[c]=a[d];a[d]=temp;
}
void change(char c){char temp;if(c=='R'){temp=a[14];a[14]=a[47];a[47]=a[42];a[42]=a[2];a[2]=temp;temp=a[26];a[26]=a[50];a[50]=a[30];a[30]=a[5];a[5]=temp;temp=a[38];a[38]=a[53];a[53]=a[18];a[18]=a[8];a[8]=temp;sup(16,27,40,29);sup(17,15,39,41);}if(c=='L'){sup(12,0,44,45);sup(24,3,32,48);sup(36,6,20,51);sup(10,21,34,23);sup(11,9,33,35);}if(c=='U'){sup(9,12,15,18);sup(10,13,16,19);sup(11,14,17,20);sup(1,3,7,5);sup(0,6,8,2);}if(c=='D'){sup(36,33,42,39);sup(37,34,43,40);sup(38,35,44,41);sup(46,48,52,50);sup(45,51,53,47);}if(c=='F'){sup(15,6,35,47);sup(27,7,23,46);sup(39,8,11,45);sup(13,24,37,26);sup(12,36,38,14);}if(c=='B'){sup(0,17,53,33);sup(1,29,52,21);sup(2,41,51,9);sup(19,30,43,32);sup(18,42,44,20);}if(c=='M'){sup(13,1,43,46);sup(25,4,31,49);sup(37,7,19,52);}if(c=='E'){sup(24,21,30,27);sup(25,22,31,28);sup(26,23,32,29);}if(c=='S'){sup(5,10,48,40);sup(4,22,49,28);sup(3,34,50,16);}if(c=='r'){change('R');change('M');change('M');change('M');}if(c=='l'){change('L');change('M');}if(c=='u'){change('U');change('E');change('E');change('E');}if(c=='d'){change('D');change('E');}if(c=='f'){change('F');change('S');}if(c=='b'){change('B');change('S');change('S');change('S');}if(c=='x'){change('r');change('L');change('L');change('L');}if(c=='y'){change('u');change('D');change('D');change('D');}if(c=='z'){change('f');change('B');change('B');change('B');}
}
bool sp(int i,int j,int k)
{if(a[i]!=a[j]||a[k]!=a[j]||a[i]!=a[k])return 0;return 1;
}
bool equal(){for(int i=0;i<=17;i++)if(a[3*i]!=a[3*i+1]||a[3*i+2]!=a[3*i+1]||a[3*i]!=a[3*i+2])return 0;if(!sp(0,3,6))return 0;if(!sp(9,21,33))return 0;if(!sp(12,24,36))return 0;if(!sp(15,27,39))return 0;if(!sp(18,30,42))return 0;if(!sp(45,48,51))return 0;return 1;
}
int main()
{int T,i,jl,j,k,flg;scanf("%d",&T);while(T--){jl=0;scanf("%s",a);scanf("%s",op);for(i=0;i<strlen(op);i++){if(op[i]=='(')flg=i;else if(op[i]==39){change(op[i-1]);change(op[i-1]);}else if(op[i]=='2'){if(op[i-1]==39){change(op[i-2]);change(op[i-2]);change(op[i-2]);}else if(op[i-1]==')'){op[i]='q';i=flg;}else change(op[i-1]);     }else change(op[i]);}if(equal())printf("YES\n");else printf("NO\n");}return 0;
}

转载于:https://www.cnblogs.com/87hbteo/p/8946564.html

SOJ 4590 简单模拟相关推荐

  1. IoC容器总结与简单模拟

    IoC容器总结与简单模拟 当一个组件需要外部资源时,最直接也最明智的方法是执行查找,这种行为称为主动查找.但这种查找存在一个缺点--组件需要知道如何获得资源.那么它的解决方案是什么呢?请看下文. AD ...

  2. 使用动态代理简单模拟一下spring的事务管理

    按照平时写代码的习惯,我们会定义一个service接口 package com.proxy.test; public interface UserService {public void sayHel ...

  3. 7-18 银行业务队列简单模拟 (25 分)

    7-18 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...

  4. Jmeter简介以及简单模拟性能测试

    1.Jemter简介 1.我们为什么使用Jmeter 开源,免费,基于Java编写,可集成到其他系统可拓展各个功能插件 支持接口测试, 压力(负载和压力)测试等多种功能,支持录制回放, 入门简单相较于 ...

  5. JavaWeb学习总结(四十九)——简单模拟Sping MVC

    在Spring MVC中,将一个普通的java类标注上Controller注解之后,再将类中的方法使用RequestMapping注解标注,那么这个普通的java类就够处理Web请求,示例代码如下: ...

  6. 银行业务队列简单模拟 (25 分)c语言c++

    7-2 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达银 ...

  7. NYOJ 题目77 开灯问题(简单模拟)

    开灯问题 时间限制:3000 ms  |            内存限制:65535 KB 难度:1 描述 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯 ...

  8. FZU - 2202 犯罪嫌疑人(逻辑思维+简单模拟)

    题目链接:点击查看 题目大意:给出n和m,代表有n个人,每个人说一句话,指认一个人是无辜还是罪犯,总共有m个人说了真话,问每个人说话的真实性 题目分析:一拿到这个题目我是懵逼的..因为n给到了1e5, ...

  9. 7-45 银行业务队列简单模拟 (10 分)

    7-45 银行业务队列简单模拟 (10 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...

最新文章

  1. php 严格过滤,php 常用过滤类
  2. 提高显卡性能软件_华硕RTX30系显卡亮相
  3. Introduction to 3D Game Programming with DirectX 12一书学习记录(第一个例子编译错误)
  4. 腾讯云使用Python发邮件
  5. H3C防火墙实现NAT+DHCP
  6. 动态代理原理源码分析
  7. 【搜索引擎】全文索引数据结构和算法
  8. Ubuntu 星际译王StarDict
  9. JAVA如何分段_OpenCV Java文本分段
  10. asmack xmpp应用遇到的问题
  11. Android欢迎页短暂白屏
  12. SparkSQL架构
  13. 计算机导论高清课件教程,计算机导论-PPT课件
  14. py3 写的基于GUI 的 旁注 wwwscan集成扫描工具
  15. 如何正确选择飞秒激光手术医…
  16. 七十二烷基三硅醇poss|七十二烷基三硅醇笼形聚倍半硅氧烷
  17. 计算机语言表示教师节快乐,教师节经典暖心语录80句精选
  18. matlab如何泰勒公式用求近似值_matlab2016bn阶泰勒公式怎么求?
  19. axure树形表格_表格 树形菜单/excel 如何实现分级显示,也就是树形的菜单
  20. visio 画图记录

热门文章

  1. 推荐3本Python高分书籍,居家旅行必备神器!
  2. XDOJ 分配宝藏 C
  3. 性能优化系列:每个程序员都应该知道的数字
  4. WordPress如何采集WordPress采集插件推荐
  5. 程序员如何做到高效减脂、减肥
  6. is running 8724480B beyond the ‘PHYSICAL‘ memory limit.
  7. beyond the ‘PHYSICAL‘ memory limit. Current usage: 1.0 GB of 1 GB physical memory used;
  8. 面向萌新的红帽杯2018线上赛wp
  9. mysql8.0.15mis百度网盘_mysql-installer-community-8.0.15.0数据库的安装
  10. oscp——Hacker Fest: 2019