题解:P13992 【MX-X19-T1】「FeOI Round 4.5」五字神人

· · 题解

思路

对于每个字符串进行分类讨论即可。

代码中有注释可自行理解。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
int read()
{
    int res = 0,f = 1;
    char ch = getchar();
    while (ch<'0'||ch>'9') f = (ch=='-'?-1:1),ch = getchar();
    while (ch>='0'&&ch<='9') res = (res<<3)+(res<<1)+(ch^48),ch = getchar();
    return res*f;
}
void write(int x)
{
    if (x<0) putchar('-'),x=-x;
    if (x>9) write(x/10);
    putchar(x%10+'0');
}
void writech(int x,char ch){write(x),putchar(ch);}

signed main()
{
    int T=read();
    while (T--)
    {
        string s;
        cin>>s;
        int len = s.size();
        int b = 0,z = 0;
        for (int i = 0; i < len; i++) b+=(s[i]>='A'&&s[i]<='Z');
        z=len-b;
        //b记录大写字母数,z记录小写字母数 
        if (s.size()<=4) writech(5-len,'\n');//当长度小于4时n只能执行操作三 
        else if (b==5) puts("0");
        else if (len==5) puts("0");//满足条件直接输出 
        else
        {
            int ans1 = len-5;//长度满足 
            int ans2 = 2e18;//大写字母数满足 
            if (b>5) ans2=b-5;//多于5个执行操作一 
            else//多于5个时 
            {
                if (z>=5-b) ans2=5-b;//小写可满足执行操作二 
                else ans2=2*(5-b-z)+z;//操作三加操作二 
            }
            writech(min(ans1,ans2),'\n');
        }
    }

    return 0;
}