1 条题解

  • 0
    @ 2023-9-25 21:36:58

    思路: 有题可知这些话是一直重复的,而字符串最多重复两次即可形成一个循环,然后就可以默认进行打表模拟即可。

    AC代码:

    #include <bits/stdc++.h>
    using namespace std;
    //#define int long long
    string str[int(2e5)+100];
    
    signed main()
    {
        int n,num=0;
        cin>>n;
        int in=n;
        bool cap=0;
        for (int i = 0; i < n; ++i) {
            string x;
            cin>>x;
            if(x=="CapsLock"){
                num++;
                cap=!cap;
                in--;
                continue;
            }
            if (cap){
                for (int i=0;i<x.size();i++) {
                    if(islower(x[i])){
                        x[i]=toupper(x[i]);
                    }else{
                        x[i]=tolower(x[i]);
                    }
                }
            }
            str[i-(n-in)]=x;
        }
        if(num%2){
            for (int i = 0; i < in; ++i) {
                string x=str[i];
                for (int j=0; j < x.size(); j++) {
                    if(islower(x[j])){
                        x[j]=toupper(x[j]);
                    }else{
                        x[j]=tolower(x[j]);
                    }
                }
                str[i+in]=x;
            }
        }else{
            for(int i=0;i<in;++i){
                str[i+in]=str[i];
            }
        }
        int q;
        cin>>q;
        for (int i = 0; i < q; ++i) {
            long long x;
            cin>>x;
            cout<<str[(x-1)%(2*in)]<<endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    7771
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    1
    已通过
    1
    上传者