CSU-暑假集训题 Long Number

题目链接:http://codeforces.com/problemset/problem/1157/B

思路:

大致题意就是一个长串数字中连续的一段的i可以用f(i)替换,得到的最大值是多少。

这个就是从前往后遍历,f(i)大于i就开始替换,遇到小于i的就停止。要注意开始替换的位置

AC代码

#include<iostream>
#include<cstring>
using namespace std;
int b[10];
int getNum(int n);
int main()
{
    int n,num;
    cin>>n;
    string s;
    cin>>s;
    for(int i=1;i<=9;i++)cin>>b[i];
    int i;
    int flag=0;              //flag=1表示开始选择一段数字变成相应的f(i) 
    for(i=0;i<n;i++)
    {
        int a=s[i]-'0';
        if(b[a]==a)cout<<a;
        else if(b[a]>a){
            flag=1;
            cout<<b[a];
        }
        else if(flag&&b[a]<a)break;        
        else cout<<a;
    }
    for(;i<n;i++)cout<<s[i]-'0';
    cout<<endl;
    return 0;
}

 

posted @ 2019-07-26 19:10  小小笼包包  Views(115)  Comments(0)    收藏  举报