标签:https 完全 break 朴素 贪心 个数 pow 测试数据 \n
注意:有多组测试数据,且\(1≤L≤R≤10^9\).
如此计算一个正整数p的荒谬程度:
(1) 首先将p看做一个由数字组成的字符串(不带前导0).
(2) 然后,如果p的最后一个字符是0,就去掉它.重复这一过程,直到p的最后一个字符不是0.
(3) 记此时数字p的长度为len,如果p的最后一位是5,则荒谬程度为\(2*len-1\);否则为\(2*len\).
int main(){
int T=read();
while(T--){
int l=read(),r=read(),minn=20,ans;
while(l<=r){
int l1=l,num=0;
while(l1%10==0){l1/=10;num++;}
//num是当前枚举到的数字的末尾的零的个数
int last=l1%10,len=0;
while(l1){l1/=10;len++;}
//last是最低非零位上的数字
//len是从 最低非零位到最高位上 的数字个数
int sum;
if(last==5)sum=2*len-1;
else sum=2*len;
//sum是荒谬程度
if(sum<minn)minn=sum,ans=l;
//更新最小荒谬程度,更新答案
if(sum==1)break;
//一个小小的优化:荒谬程度为1,肯定是最小的.
l+=pow(10,num);
//枚举:每次自增10^num
}
printf("%d\n",ans);
}
return 0;
}
标签:https 完全 break 朴素 贪心 个数 pow 测试数据 \n
原文地址:https://www.cnblogs.com/PPXppx/p/10331587.html