「SiR-1」Popsicle
题目背景
猫猫喜欢收集雪糕棒,每十三个捆成一束。
可爱的猫猫喜欢优雅地摆烂。
题目描述
猫猫有若干个雪糕棒排成一排,每个雪糕棒上有一个 0 ∼ 9 0\sim 9 0∼9 的数字,并且满足最左边的雪糕棒上写的数字不为 0 0 0。猫猫认为这一排雪糕棒从左到右依次构成了十进制正整数 n n n。
猫猫认为 0 0 0 是美好的,所以她会尽可能把 n n n 变成 0 0 0,也就是把所有雪糕棒都拿走。
猫猫每次会进行一次操作。每次操作选择一个数字非 0 0 0 的雪糕棒,并将其减 1 1 1。这之后,如果最左边有连续的一些数字为 0 0 0 的雪糕棒(也即 n n n 出现了前导 0 0 0),猫猫会把这些雪糕棒拿走。
小老鼠会来捣乱,它会在某个时刻(可能是所有操作开始之前,也可能是猫猫任意一次操作之后)改变某个雪糕棒上的一个数字。小老鼠总共只能改变一个数字。
小老鼠希望操作次数尽量多,猫猫希望操作次数尽量少,所以她想知道二者都使用最优策略时,她的操作次数。
输入格式
本题有多组数据。
第一行一个正整数 T T T 表示数据组数。
对于每组数据:仅一行,一个正整数 n n n。
输出格式
共 T T T 行,每行一个整数,表示答案。
样例 #1
样例输入 #1
2
1100
11332132121
样例输出 #1
11
28
提示
样例解释 1
对于第一组数据,小老鼠可以一开始就将 1100 1100 1100 变为 1109 1109 1109,这样猫猫共需要 1 + 1 + 9 1 + 1 + 9 1+1+9 次操作把 n n n 变为 0 0 0。
数据规模与约定
- Subtask 0(13 pts): n ≤ 99 n \leq 99 n≤99。
- Subtask 1(13 pts): n = 1 0 k n = 10^k n=10k, k k k 为自然数。
- Subtask 2(13 pts): n = 1 0 k − 1 n = 10^k - 1 n=10k−1, k k k 为正整数。
- Subtask 3(13 pts): n ≤ 999 999 n \leq 999\ 999 n≤999 999。
- Subtask 4(48 pts):无特殊限制。
对于所有数据, 1 ≤ T ≤ 3333 1 \leq T \leq 3333 1≤T≤3333, 1 ≤ n ≤ 9 999 999 999 999 ( = 1 0 13 − 1 ) 1 \leq n \leq 9\ 999\ 999\ 999\ 999(=10^{13} - 1) 1≤n≤9 999 999 999 999(=1013−1),毕竟猫猫最多一捆只有 13 13 13 根雪糕嘛。
C++实现
#include
using namespace std;
int main()
{
int T;
cin>>T;
while(T–){
int ans=0,mi=9;
string s;
cin>>s;
for(int i=0;i<s.size();i++){
ans+=s[i]-‘0’;
mi=min(mi,s[i]-‘0’);
}
if(mi==0){
cout<<ans+9<<endl;
}else{
cout<<ans+8<<endl;
}
}
return 0;
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容