CF1157B Long Number

发布时间 2023-09-08 09:49:13作者: 是002呀

题目传送门——Long Number

简单思路

由题意得我们要改变一个区间内的数,使得最后的结果最大,所以显而易见,根据数学规则,位数越高的数越大,最后的数越大,所以我们要尽可能早的开始更改数字,所以当我们便利的时候一旦发现有数的替换数大于本身,我们就将他替换,同时往后循环,如果后面的数的替换数大于等于本身,我们也将他更换(防止后面有遗漏)因为修改的要求是连续的数段,所以我们一旦遇到不符合的条件就直接退出就行了

代码

#include<bits/stdc++.h>
using namespace std;
int n,a[200005],num[15];
char ch;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>ch;//用字符串的形式读入
		a[i]=ch-'0';
	}
	for(int i=1;i<=9;i++) cin>>num[i];
	for(int i=1;i<=n;i++){
		if(num[a[i]]>a[i]){
			for(int j=i;j<=n;j++){
				if(num[a[j]]<a[j]) break;//不符合条件就退出
				a[j]=num[a[j]];
			}
			break;//数段结束后就退出,不用再继续了
		}
	}
	for(int i=1;i<=n;i++) cout<<a[i];//输出最后的结果
	return 0;
}