打卡信奥刷题(014)用C++信奥P9354[普及组/提高] 「SiR-1」Popsicle

「SiR-1」Popsicle

题目背景

猫猫喜欢收集雪糕棒,每十三个捆成一束。

可爱的猫猫喜欢优雅地摆烂。

题目描述

猫猫有若干个雪糕棒排成一排,每个雪糕棒上有一个 0 ∼ 9 0\sim 9 09 的数字,并且满足最左边的雪糕棒上写的数字不为 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 n99
  • 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=10k1 k k k 为正整数。
  • Subtask 3(13 pts): n ≤ 999   999 n \leq 999\ 999 n999 999
  • Subtask 4(48 pts):无特殊限制。

对于所有数据, 1 ≤ T ≤ 3333 1 \leq T \leq 3333 1T3333 1 ≤ n ≤ 9   999   999   999   999 ( = 1 0 13 − 1 ) 1 \leq n \leq 9\ 999\ 999\ 999\ 999(=10^{13} - 1) 1n9 999 999 999 999(=10131),毕竟猫猫最多一捆只有 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考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值