码迷,mamicode.com
首页 > 其他好文 > 详细

增量幻境

时间:2019-11-17 12:41:35      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:space   一个   int   tchar   style   %s   img   bsp   alt   

增量幻境

时间限制: 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

 

增量幻境

标签:space   一个   int   tchar   style   %s   img   bsp   alt   

原文地址:https://www.cnblogs.com/Jony-English/p/11875836.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!