1 条题解

  • 0
    @ 2025-8-24 22:40:17

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 刘辰雨
    如果你不想称呼我的全名,你可以以我名称的任意非空后缀来称呼我。

    搬运于2025-08-24 22:40:17,当前版本为作者最后更新于2022-10-08 13:43:43,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    The Solution of P8573

    题意:

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

    假定输入不断循环,询问 q 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 并提交第二次。

    • 1

    信息

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