P7183题解

· · 题解

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

题意

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

思路

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

  2. 对于已经对齐位置的大写字母,可以忽略掉,所以只看当前大写字母需要几个占位符,并累计到答案变量 ans 里,当前大写字母的位置就是原来的位置 i 加上 ans ,而占位符数量就是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;
}