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

· · 题解

传送门

难道是没人写题解嘛,为什么题解这里没有捏,还是题目太简单?,被窝这只小蒟蒻抓住机会力~QWQ

思路:

突破点在于大写字母数量和字符串长度,1,3操作是对字符串长度进行更改,2,3操作是对大写字母数量更改。

所以我们只需要找出实现两种结果的方法中代价最小的,用cnt表示大写字母数量,length表示字符串长度。

只需判断两者与5相比的波动情况,波动越小,实现的操作数越小,波动值就是最小操作数,取最小将操作数输出即可。

Code:

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
template<typename T> void re(T&x){x = 0; int sign = 1; char c;do{c = getchar(); if (c == '-') sign = -1;}while(!isdigit(c)); do{x = x * 10 + c - '0'; c = getchar();}while(isdigit(c)); x *= sign;}
void write(int x){if (x < 0) x = -x, putchar('-'); if (x < 10) putchar(x + '0'); else write(x / 10), putchar(x % 10 + '0');}

ll t;

int main(){
    re(t);
    while (t --){
        string s;
        cin >> s;
        ll cnt = 0;
        for (int i = 0;i < s.size(); i ++) if (isupper(s[i])) cnt ++; // 统计大写字母数量
        ll lengths = s.size(); // 存储字符串长度
        ll ans = min(abs(cnt - 5), abs(lengths - 5)); // 取波动值取最小
        printf("%lld\n", ans);
    }
    return 0;
}

\textit{\textbf Thank you for reading !!}