这个问题要问吗
  • 板块灌水区
  • 楼主absolute_value
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/10/4 17:25
  • 上次更新2023/11/2 15:45:40
查看原帖
这个问题要问吗
1067907
absolute_value楼主2023/10/4 17:25

题目描述

小科同学最近醉心于动态规划的研究,他苦学百年,已经牢牢掌握了最长上升子序列的知识。

小科对于这种单调不减的序列非常着迷,于是他写下了一个数 。

他希望找到最大的一个小于等于 x 的数,使得这个数的各个数位是单调不减的。

他觉得这太简单了,于是想考考你。

输入格式

从文件 increase.in 中读入数据。

一行一个数 。

输出格式

输出到文件 increase.out 中。

一行一个数表示答案。

对于100%100\%的数据,0≤x≤101050\le{x}\le10^{10^5}

#include<bits/stdc++.h>
using namespace std;
string s,s1;
int main(){
	int p=-1;
	cin>>s;
	s1=s;
	char c=s[0];
	for(int i=1;i<s.size();i++){
		if(c>s[i]){
			if(p==-1) p=i;
			s[i]=c;
		}else{
			c=s[i];
		}
	}
	c=s[s.size()-1];
	for(int i=s.size()-1;i>=p&&p!=-1;i--){
		s[i]='9';
	}
	int flag=0;
	for(int i=p-1;i>=0;i--){
		if(i!=0&&c!=s[i-1]){
			s[i]--;
			break;
		}
		if(i==0){
			flag=1;
		}
	}
	if(flag==1) {
		if(s[0]!='1') cout<<(char)(s[0]-1);
		for(int i=1;i<s.size();i++){
			cout<<s[i];
		}
	}
	else cout<<s;
	return 0;
}

爆0了/悲

2023/10/4 17:25
加载中...