题目传送门——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;
}