增量幻境
作者:互联网
增量幻境
时间限制: 1 Sec 内存限制: 128 MB
题目描述
众所周知,小葱同学擅长计算,尤其擅长计算组合数,但这个题和组合数没什么关系。
小葱同学最近醉心于动态规划的研究,他苦学百年,已经牢牢掌握了最长上升子序列的知识。小葱对于这种单调不减的序列非常着迷,于是他灵机一动,挥笔写下了一个数x,现在小葱同学希望找到一个小于等于x的数,使得这个数的各个数位是单调不减的。求这个数。
输入
一行一个数x。
输出
一行一个数代表答案。
样例输入
233996
样例输出
233899
提示
对于40%的数据,x≤105。
对于60%的数据,x≤109。
对于80%的数据,x≤1018。
对于100%的数据,0≤x≤10100000。
题解
如果从左至右第i位之前的最大值为x(0<=x<=9),x第一次出现在p位,在第i位第一次小于x,则第p位改为x-1,p之后全变成9。
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 const int N=101000; 6 char c[N]; 7 int mx,p,n,l; 8 int main() 9 { 10 scanf("%s",c); 11 n=strlen(c); 12 mx=-1; 13 for(int i=0;i<n;i++) 14 { 15 int x=c[i]-'0'; 16 if(x<mx) 17 { 18 c[p]-=1; 19 if(c[p]<'0') 20 c[p-1]-=1, 21 c[p]='9'; 22 for(int j=p+1;j<n;j++) 23 c[j]='9'; 24 break; 25 } 26 if(x>mx) 27 mx=x,p=i; 28 } 29 while(c[l]=='0'&&l+1<n) l++; 30 for(int i=l;i<n;i++) 31 putchar(c[i]); 32 return 0; 33 }View Code
标签:对于,int,样例,幻境,增量,include,mx,小葱 来源: https://www.cnblogs.com/Jony-English/p/11875836.html