• SOJ 4590 简单模拟


    Description

      Gandtom把家搬到了一个交通便利的地方。今天来通知他的朋友Sidney,但是Sidney好像不在家,出门了,敲门没有人开门。 
      于是Gandtom把家里的地址写了下来。他担心别人看到了这张纸条,于是就把这个纸条塞到了一个魔方里,并且留下了一个式子。如果Sidney能照着式子将魔方复原,就能打开魔方,得到Gandtom的新住址。 
      众所周知,一个三阶魔方共有72种旋转方式,分述如图1。 
      图1.jpg-162.6kB 
      给一个字符串,代表式子。该字符串仅包含                     等二十二个字符。不存在的子串。最多只有一层括号。 
      我们将图2的魔方展开成图3的样子,并对图3位置进行编号,以便用字符串表示魔方。 
      图2.jpg-34.5kB 图3.jpg-54kB 
      用于表示魔方的字符串仅包含下列字母:-黄、-橙、-蓝、-红、-绿、-白,且一定是个可复原的魔方。该字符串表示位置的颜色为。例如,字符串即代表了图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
    ");
           else printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    Git 分支创建,合并, 分支切换, 分支拉取,提交
    Win7 Nodejs 安装
    .ssh github
    xxxx.IronManager was loaded by com.taobao.pandora.boot.loader.XxxxClassLoader@xxx,it should be loaded by Pandora Container...与摒弃引进别的项目的一些冲突包
    推荐一波微软家的浏览器:EDGE
    谷歌浏览器新功能 Copy Declaration
    微信支付回调数据接收不完整解决方案
    开源物联网框架EasyIot(适用于快递柜&售货机)
    开源物联网框架EasyIot场景落地(适用于快递柜、储物柜)
    海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本
  • 原文地址:https://www.cnblogs.com/87hbteo/p/8946564.html
Copyright © 2020-2023  润新知