直接WA到自闭,没忍住去看了题解,发现题意都搞错了,尴尬……
题意:一串数,从1到9都有与之对应的数字,每位可以转化也可以不转化,但是只要转化后再选择不转化,就不能再进行转化了,让你求可以得到的最大的数;
思路:从最高位,转化比不转化大,就转化,转化过程中,某位转化比不转化小,就停止转化,直接输出;
解释有些复杂,但思路异常简单,代码一看就懂;
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAX=2e5+1;
char s[MAX];
char a[15];
char b[MAX];
int main()
{
int i,n,m,j,k,l,flag=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
scanf("%d%*c",&n);
for(i=0;i<=n-1;i++)
scanf("%c",&s[i]);
scanf("%*c");
//puts(s);
for(i=1;i<=9;i++)
{
scanf("%c%*c",&a[i]);
}
for(i=0;i<=n-1;i++)
{
b[i]=a[s[i]-48];
if(b[i]>s[i]){
s[i]=b[i];flag=1;
for(j=i+1;j<=n-1;j++)
{
b[j]=a[s[j]-48];
if(b[j]<s[j])
break;
s[j]=b[j];
}
}
if(flag)break;
}
puts(s);
}