zoukankan      html  css  js  c++  java
  • SWERC13 Decoding the Hallway

    找规律 

    S+1 = S +'L'+~rev(S)


    Problem D
    Decoding the Hallway
    Problem D
    Edward is now 21 years old. He has to appear in an exam to renew his State Alchemist
    title. This year the exam is arranged in a bit different way. There will be a long hallway. Each
    alchemist will enter the hallway from the left side and come out from the right side and he has to
    do this n times. During this tour they have to bend the hallway segments right-left alternatively.
    Let’s describe the process in some pictures:
    • First time (First picture): Initially, the hallway is a straight line (soft line in the first
    picture). So alchemist will bend this segment to right side (he is going from left to right)
    like the hard line in the first picture above.
    • Second time (Second picture): Now he will find two segments in hallway (like soft line in
    picture). So he will bend the first hallway to right, second one to left (like the hard lines).
    • Third time (Third picture): Now he will find four segments in the hallway (like the soft
    lines) and he will bend them to Right, Left, Right and Left respectively.
    • And this goes on for fourth and fifth times in the picture.
    Since Full Metal Alchemist Edward is so good, he did it perfectly. Now it is turn of the
    judges to check the bending if it is correct or not. The judge enters at the left end and comes
    out from the right end. But during his travel he notes down the turning, R for Right and L for
    Left. So if n = 1, then the judge would have noted down L. If n = 2, it would have been LLR.
    For n = 4, it would have been: LLRLLRRLLLRRLRR.
    Since this string will grow exponentially with n, it will be tough to check whether the bending
    is correct or not. So the judges have some pre-generated strings and they know whether this
    string will appear as substring in the final string or not. Unfortunately the judges have lost the
    answer sheet, can you help them to recover it?


    INPUT
    First line of the test file contains a positive integer T denoting number of test cases (T <=
    105). Hence follows T lines, each containing an integer and a string: n S. n is the number of
    times Edward has passed through the hallway; and S is the string the judge is going to check
    with. You may assume that S consists of only the letters L and R. (n <= 1000, length of S
    <= 100). Also you may assume that length of S will not be greater than the length of the
    string for n.
    OUTPUT
    For each test case output the case number and Yes or No denoting whether the string is in
    the final string as substring.
    1Problem D
    Decoding the Hallway
    SAMPLE INPUT SAMPLE OUTPUT
    2
    1 R
    4 LRRLL Case 1: No
    Case 2: Yes
    2
    Pro

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <string>
    
    using namespace std;
    
    string letsgo[20],str;
    
    string reverse(string x)
    {
        string y;
        int sz=x.length();
        for(int i=sz-1;i>=0;i--)
        {
            y+=x[i];
        }
        return y;
    }
    
    string change(string x)
    {
        string y;
         int sz=x.length();
        for(int i=0;i<sz;i++)
        {
            if(x[i]=='L')   y+="R";
            else y+="L";
        }
        return y;
    }
    
    void init()
    {
        letsgo[1]="L";
        for(int i=2;i<=10;i++)
        {
            int sz=letsgo[i-1].length();
            string rletsgo=reverse(letsgo[i-1]);
            rletsgo=change(rletsgo);
            letsgo[i]=letsgo[i-1]+"L"+rletsgo;
        }
    }
    
    bool check_left(int L,int R)
    {
        string text;
        for(int i=L;i<=R;i++)
        {
            text+=str[i];
        }
        int t=letsgo[10].find(str);
        if(t<letsgo[10].length())
            return true;
        return false;
    }
    
    bool check_right(int L,int R)
    {
        string text;
        for(int i=L;i<=R;i++)
        {
            text+=str[i];
        }
        text=reverse(change(text));
        int t=letsgo[10].find(str);
        if(t<letsgo[10].length())
            return true;
        return false;
    }
    
    int main()
    {
        init();
        int n;
        int T_T,cas=1;
        cin>>T_T;
        while(T_T--)
        {
            cin>>n>>str;
            int len=str.length();
            cout<<"Case "<<cas++<<": ";
            if(n<=10)
            {
                int t=letsgo[n].find(str);
                if(t<letsgo[n].length())
                {
                    puts("Yes");
                }
                else
                {
                    puts("No");
                }
            }
            else
            {
                int m=str.length();
                bool flag=false;
                for(int i=0;i<m;i++)
                {
                    if(str[i]=='L')
                    {
                        if(check_left(0,i-1)&&check_right(i+1,m-1))
                        {
                            flag=true;
                            break;
                        }
                    }
                }
                if(flag==false)
                {
                    int t=letsgo[10].find(str);
                    if(t<letsgo[10].length())
                    {
                        flag=true;
                    }
                }
                if(flag) puts("Yes");
                else puts("No");
            }
        }
        return 0;
    }
    



  • 相关阅读:
    docker从容器中怎么访问宿主机
    fail2ban CentOS7安装
    关于sql当中的isnull和ifnull的区别
    关于mybatis反向生成的时候,对于数据库当中的数据类型是text的处理。
    关于Java当中的MapUtils工具类的使用和注意事项。
    在大数据管理平台HDP的ambria的时候遇到python的安全认证的问题
    通过java代码实现调用excel当中的宏的操作。
    通过vba实现对word当中个的标签进行批量的替换
    通过vba实现对word当中的表格动态的插入行,同时对表中进行数据的填充。
    关于vba实现删除word文档中的指定表格。
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6791232.html
Copyright © 2011-2022 走看看