SOJ 4590 简单模拟
Description
Gandtom把家搬到了一个交通便利的地方。今天来通知他的朋友Sidney,但是Sidney好像不在家,出门了,敲门没有人开门。
于是Gandtom把家里的地址写了下来。他担心别人看到了这张纸条,于是就把这个纸条塞到了一个魔方里,并且留下了一个式子。如果Sidney能照着式子将魔方复原,就能打开魔方,得到Gandtom的新住址。
众所周知,一个三阶魔方共有72种旋转方式,分述如图1。
给一个字符串,代表式子。该字符串仅包含 等二十二个字符。不存在的子串。最多只有一层括号。
我们将图2的魔方展开成图3的样子,并对图3位置进行编号,以便用字符串表示魔方。
用于表示魔方的字符串仅包含下列字母:-黄、-橙、-蓝、-红、-绿、-白,且一定是个可复原的魔方。该字符串表示位置的颜色为。例如,字符串即代表了图3。
试求魔方经过式子能否被复原。
Input
第一行有一个整数,表示组数。
每组数据第一行有一个字符串。
每组数据第二行有一个字符串。
Output
每组数据输出一行。
如果魔方能复原输出""(不含引号)。
否则输出""(不含引号)。
Sample Input
2
YYYYYYYYYGGGOOOBBBRRROOOBBBRRRGGGOOOBBBRRRGGGWWWWWWWWW
U
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 简单模拟相关推荐
- IoC容器总结与简单模拟
IoC容器总结与简单模拟 当一个组件需要外部资源时,最直接也最明智的方法是执行查找,这种行为称为主动查找.但这种查找存在一个缺点--组件需要知道如何获得资源.那么它的解决方案是什么呢?请看下文. AD ...
- 使用动态代理简单模拟一下spring的事务管理
按照平时写代码的习惯,我们会定义一个service接口 package com.proxy.test; public interface UserService {public void sayHel ...
- 7-18 银行业务队列简单模拟 (25 分)
7-18 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...
- Jmeter简介以及简单模拟性能测试
1.Jemter简介 1.我们为什么使用Jmeter 开源,免费,基于Java编写,可集成到其他系统可拓展各个功能插件 支持接口测试, 压力(负载和压力)测试等多种功能,支持录制回放, 入门简单相较于 ...
- JavaWeb学习总结(四十九)——简单模拟Sping MVC
在Spring MVC中,将一个普通的java类标注上Controller注解之后,再将类中的方法使用RequestMapping注解标注,那么这个普通的java类就够处理Web请求,示例代码如下: ...
- 银行业务队列简单模拟 (25 分)c语言c++
7-2 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达银 ...
- NYOJ 题目77 开灯问题(简单模拟)
开灯问题 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯 ...
- FZU - 2202 犯罪嫌疑人(逻辑思维+简单模拟)
题目链接:点击查看 题目大意:给出n和m,代表有n个人,每个人说一句话,指认一个人是无辜还是罪犯,总共有m个人说了真话,问每个人说话的真实性 题目分析:一拿到这个题目我是懵逼的..因为n给到了1e5, ...
- 7-45 银行业务队列简单模拟 (10 分)
7-45 银行业务队列简单模拟 (10 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...
最新文章
- php 严格过滤,php 常用过滤类
- 提高显卡性能软件_华硕RTX30系显卡亮相
- Introduction to 3D Game Programming with DirectX 12一书学习记录(第一个例子编译错误)
- 腾讯云使用Python发邮件
- H3C防火墙实现NAT+DHCP
- 动态代理原理源码分析
- 【搜索引擎】全文索引数据结构和算法
- Ubuntu 星际译王StarDict
- JAVA如何分段_OpenCV Java文本分段
- asmack xmpp应用遇到的问题
- Android欢迎页短暂白屏
- SparkSQL架构
- 计算机导论高清课件教程,计算机导论-PPT课件
- py3 写的基于GUI 的 旁注 wwwscan集成扫描工具
- 如何正确选择飞秒激光手术医…
- 七十二烷基三硅醇poss|七十二烷基三硅醇笼形聚倍半硅氧烷
- 计算机语言表示教师节快乐,教师节经典暖心语录80句精选
- matlab如何泰勒公式用求近似值_matlab2016bn阶泰勒公式怎么求?
- axure树形表格_表格 树形菜单/excel 如何实现分级显示,也就是树形的菜单
- visio 画图记录
热门文章
- 推荐3本Python高分书籍,居家旅行必备神器!
- XDOJ 分配宝藏 C
- 性能优化系列:每个程序员都应该知道的数字
- WordPress如何采集WordPress采集插件推荐
- 程序员如何做到高效减脂、减肥
- is running 8724480B beyond the ‘PHYSICAL‘ memory limit.
- beyond the ‘PHYSICAL‘ memory limit. Current usage: 1.0 GB of 1 GB physical memory used;
- 面向萌新的红帽杯2018线上赛wp
- mysql8.0.15mis百度网盘_mysql-installer-community-8.0.15.0数据库的安装
- oscp——Hacker Fest: 2019