1 条题解

  • 0
    @ 2025-8-24 22:27:25

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Ptilopsis_w
    你以为我是谁?这是我埋下的因,我要亲手解决这一切。

    搬运于2025-08-24 22:27:25,当前版本为作者最后更新于2021-05-27 20:12:00,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    我写题解才不是为了混咕值呢\Large\color{white}{我写题解才不是为了混咕值呢}

    题意

    有一个字符串 ss , 可以往其中任意位置插入占位符,使其所有的大写字母的位置都在 44 的倍数上,插入占位符的最小数量

    思路

    1. 题目很简单,对着样例搞一下就可以发现,在两个大写字母间,不管怎么插入占位符,只要数量相同效果就一样,所以思路就是用占位符从头开始一个个地将大写字母“推”到相应的位置上

    2. 对于已经对齐位置的大写字母,可以忽略掉,所以只看当前大写字母需要几个占位符,并累计到答案变量 ansans 里,当前大写字母的位置就是原来的位置 ii 加上 ansans ,而占位符数量就是4-(i+ans)%4,至此,问题已经解决

    代码

    tips: STL中有个函数isupper(),可以用来判断一个字符是否为大写字母

    #include<cstdio>
    #include<cstring>
    using namespace std;
    
    int main()
    {
    	char ch[205];
    	scanf("%s", ch);
    	int n = strlen(ch);
    	int ans = 0;
    	for(int i = 0; i < n; i++)
    	{
    		if(isupper(ch[i]) and (i+ans)%4 != 0)
    			ans += 4-(i+ans)%4;
    	}
    	printf("%d", ans);
    	return 0;
    }
    
    • 1

    信息

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