首页 > 其他分享 >Popsicle

Popsicle

时间:2023-05-22 22:44:38浏览次数:49  
标签:Popsicle leq 猫猫 雪糕 999 int 操作

Popsicle 洛谷

题目描述

猫猫有若干个雪糕棒排成一排,每个雪糕棒上有一个 \(0\sim 9\) 的数字,并且满足最左边的雪糕棒上写的数字不为 \(0\)。猫猫认为这一排雪糕棒从左到右依次构成了十进制正整数 \(n\)。

猫猫认为 \(0\) 是美好的,所以她会尽可能把 \(n\) 变成 \(0\),也就是把所有雪糕棒都拿走。

猫猫每次会进行一次操作。每次操作选择一个数字非 \(0\) 的雪糕棒,并将其减 \(1\)。这之后,如果最左边有连续的一些数字为 \(0\) 的雪糕棒(也即 \(n\) 出现了前导 \(0\)),猫猫会把这些雪糕棒拿走。

小老鼠会来捣乱,它会在某个时刻(可能是所有操作开始之前,也可能是猫猫任意一次操作之后)改变某个雪糕棒上的一个数字。小老鼠总共只能改变一个数字

小老鼠希望操作次数尽量多,猫猫希望操作次数尽量少,所以她想知道二者都使用最优策略时,她的操作次数。


输入格式

本题有多组数据。

第一行一个正整数 \(T\) 表示数据组数。

对于每组数据:仅一行,一个正整数 \(n\)。


输出格式

共 \(T\) 行,每行一个整数,表示答案。


样例输入

2
1100
11332132121

样例输出

11
28

提示

对于所有数据,\(1 \leq T \leq 3333\),\(1 \leq n \leq 9\ 999\ 999\ 999\ 999(=10^{13} - 1)\),毕竟猫猫最多一捆只有 \(13\) 根雪糕嘛。


读完题目后,不难看出,如果想要保证操作次数多,最好的方法应该是一开始就把一个 \(0\) 变成 \(9\) ,直接增加了九次

如果一开始都是非 \(0\) 的数,还是可以看出,在某一时刻,必定有一个数为 \(1\) ,那么把 \(1\) 变成 \(9\) ,可以增加八次

所以答案便是所有数之和,再加上 \(8\) 或 \(9\)

\(Code:\)

#include<bits/stdc++.h>
using namespace std;
int t;

int main(){
    scanf("%d",&t);
    while(t--){
    	string x;cin>>x;
    	int ans=0,flag=0;
    	for(int i=0;i<x.size();i++){
    		ans+=x[i]-'0';
    		if(x[i]=='0') flag=1;
		}
		if(flag) printf("%d\n",ans+9);
		else printf("%d\n",ans+8);
    }
    return 0;
}

标签:Popsicle,leq,猫猫,雪糕,999,int,操作
From: https://www.cnblogs.com/HEIMOFA/p/17421994.html

相关文章