这道题曾经在CQOJ上考过,是第二次做了。
这是一道使用字符串的贪心题。首先要根据机组例子来确定:删除递增序列的最后一位。即循环找到那一位后,把后面的数往前压。所以我在艰难处理完双重循环后(这个处理不是很顺畅),便卡在了前导零上四次(CQOJ的数据太水)。最后看了下题解,将前导零处理好了,AC。
1.注意前导零的处理:while到第一个不是零的,如到头,则cout<<"0"
2.将string在开始时便后移一位,不然别扭
3.想贪心策略时要多拿几个例子,找到规律
伪代码:
cin>>a;
cin>>s;
len=a.length();
while(s){
i=0;
while(a[i]<=a[i+1]){//停留在递增序列最后一位
i++;
}
while(i<=len-2){//往前压
a[i]=a[i+1];
i++;
}
len--;
s--;
}
i=0;
while(i<=len-1&&a[i]==‘0‘)i++;//处理前导0
if(i==len)printf("0");
else
for(int j=i;j<=len-1;j++)
printf("%c",a[j]);
原文:https://www.cnblogs.com/china-mjr/p/11210058.html