一开始题目没懂,以为直接换就完事儿了,果断W,后来多读了几遍,发现选择一个连续的字串,对字串中的每一个都要用一次替换,并且这个操作只能有一次,那就从头开始找呗,替换的越早数就越大嘛,找到第一个要替换的后开始替换,直到a中的数比f中的数字大,然后又W了,上网搜了一下,然后发现自己错在哪儿了,找第一次替换的数条件是f[i]中的数要>a[i]中的,而开始替换后条件变成了f[i]>=a[i],只要等于就应该继续替换(也许下一个数也可以替换),但是我少了个=,然后就错了。
#include <bits/stdc++.h>
#include <vector>
const int SIZE=2e5+5;
int f[10],n;
char a[SIZE];
void Input()
{
scanf("%d%s",&n,a);
for(int i=1;i<=9;i++)
scanf("%d",&f[i]);
}
void Fun()
{
for(int i=0;i<n;i++)
{
if(f[a[i]-'0']>a[i]-'0')
{
int j=i;
while(f[a[j]-'0']>=a[j]-'0'&&j<n)
{
a[j]=f[a[j]-'0']+'0';
j++;
}
break;
}
}
}
void Output()
{
printf("%s\n",a);
}
int main()
{
Input();
Fun();
Output();
return 0;
}