题目链接
题面
题目大意
给出n,长度为n的数字串,以及 f(x) ( 1 <= x <= 9 )。用 f(x) 替换数字串中的一段子串,使数字串作为数值最大。
题目分析
简单模拟一下,从左向右遍历数字串,找到第一个 f(x) > x 的位置,从此处开始替换,直到 f(x) < x。
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int num[11];
int main()
{
int n;
cin>>n;
string s;
cin>>s;
for(int i=1;i<=9;i++){
scanf("%d",&num[i]);
}
int flag=1,rem=0;
for(int i=0;i<n;i++){
if(s[i]-'0'<num[s[i]-'0']){
s[i]=num[s[i]-'0']+'0';
flag=0;
}
else if(s[i]-'0'>num[s[i]-'0']&&flag==0){
break;
}
}
cout<<s<<endl;
return 0;
}