「Daily OI Round 4」Analysis
题目描述
小 C 的信息技术老师给小 C 布置了一项作业,作业内容如下:
有一个字符串,包含大小写字母和数字。你可以把任意一个字符变成另外一个字符,设变化之前字符的 ASCII 码为 a a a,变化之后字符的 ASCII 码为 b b b,则这次变化消耗 ∣ a − b ∣ |a-b| ∣a−b∣ 的时间。你需要把整个字符串变成只包含大写字母的字符串。
小 C 还有语文数学英语等很多其他重要作业要做,为了节省时间,你需要计算小 C 最少需要多久才能令字符串只包含大写字母。
输入格式
一行一个字符串 s s s 表示老师给的字符串。
输出格式
一行一个非负整数 t t t,表示令字符串只包含大写字母最少花费多少时间。
样例 #1
样例输入 #1
AA0aa
样例输出 #1
31
样例 #2
样例输入 #2
3kyOu
样例输出 #2
89
提示
【样例解释】
对于第一组样例,最好的办法是变成 AAAZZ \texttt{AAAZZ} AAAZZ,这样的话消耗就为 0 + 0 + ∣ 48 − 65 ∣ + ∣ 97 − 90 ∣ + ∣ 97 − 90 ∣ = 31 0+0+|48-65|+|97-90|+|97-90|=31 0+0+∣48−65∣+∣97−90∣+∣97−90∣=31,容易证明不存在更优的解法。
其中 48 48 48 是字符 0 \texttt{0} 0 的 ASCII 码, 65 65 65 是字符 A \texttt{A} A 的 ASCII 码, 90 90 90 是字符 Z \texttt{Z} Z 的 ASCII 码, 97 97 97 是字符 a \texttt{a} a 的 ASCII 码。
【数据范围】
本题开启捆绑测试。
设 l e n len len 为字符串 s s s 的长度。
Subtask \text{Subtask} Subtask | 分值 | l e n ≤ len \le len≤ |
---|---|---|
0 0 0 | 10 10 10 | 3 3 3 |
1 1 1 | 30 30 30 | 10 10 10 |
2 2 2 | 60 60 60 | 1 0 5 10^5 105 |
对于全部数据,保证: 1 ≤ l e n ≤ 1 0 5 1 \le len \le 10^5 1≤len≤105,且 s s s 中只包含大小写字母和数字。
C++实现
#include
#include
#include <bits/stdc++.h>
using namespace std;
string s;
int n,t;
int main() {
cin>>s;
n=s.length();
for(int i=0;i<n;i++){
if(s[i]>‘Z’)t+=s[i]-‘Z’;
if(s[i]<‘A’)t+=‘A’-s[i];
}
cout<<t;
return 0;
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP C++考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容
标签:10,信奥,OI,样例,len,90,打卡,ASCII,97 From: https://blog.csdn.net/rogeliu/article/details/142951177