P8573 「DTOI-2」星之灵 题解

· · 题解

The Solution of P8573

题意:

给出 n 个字符串,包含一定的 "CapsLock" 来决定直到下一个 "CapsLock" 的字符串的大小写

假定输入不断循环,询问 q 次不同次输入的字符串。

关键:

仔细阅读样例,不难发现,当 "CapsLock" 为奇数个时,不同的“回合”里,字符串大小写变化不一。针对此问题,可以将输入读入两边,这样保证 "CapsLock" 的数量为偶数个,从而达到创造规律的效果。

Code:

详见代码。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
int n,q;
bool flag = false;
long long x;
string s_now,s_all;
vector<string> a;
string change_back(string s,bool flag)
{
    if(flag == false)
        return s;
    else
    {
        for(int i = 0 ; i< s.length() ; i++)
        {
            if('a'<= s[i] && s[i] <= 'z')
                s[i] = s[i]-'a'+'A';
            else
                s[i] = s[i]-'A'+'a';
        }
        return s;
    }
}
int main()
{
    scanf("%d",&n);
    for(int i = 1 ; i<= n ; i++)
    {
        cin>>s_now;
        if(s_now == "CapsLock")
            flag = !flag;
        else
        {
            a.push_back(change_back(s_now,flag));
        }
    }
    long long u = a.size();
    if(flag == true)
    {
        for(long long i = 0 ; i< u ; i++)
        {
            a.push_back(change_back(a[i],true));
        }
    }
    long long tot = a.size();
    scanf("%d",&q);
    while(q--)
    {
        scanf("%lld",&x);
        if(x <= tot)
            cout<<a[x-1]<<'\n';
        else
        {
            x %= tot;
            if(x == 0)
                x = tot;
            cout<<a[x-1]<<'\n';
        }
    }
    return 0;
}

修改日志:

2022年10月10日

第一次审核未通过。修改:删除末尾无意义内容,增加变量字母Latex 并提交第二次。