560 div3 B. Long Number

Posted bxd123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了560 div3 B. Long Number相关的知识,希望对你有一定的参考价值。

Examples
input
Copy
4
1337
1 2 5 4 6 6 3 1 9
output
Copy
1557
input
Copy
5
11111
9 8 7 6 5 4 3 2 1
output
Copy
99999
input
Copy
2
33
1 1 1 1 1 1 1 1 1
output
Copy
33

给出一个字符串 和其映射 求最大字典序
技术图片
#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define ll long long
#define pb push_back
#define CLR(A,v)  memset(A,v,sizeof A)
//////////////////////////////////
#define inf 0x3f3f3f3f
const int N=2e5+5;
const int M=1000;
char ma[10];
char s[N];
int main()
{
    int n;RI(n);
    RS(s+1);
    rep(i,1,9)
    cin>>(ma[i+0]) ;

    int i=1;
    while(i<=n)
    {
        if(ma[s[i]]>s[i])
        {
            while(ma[s[i]]>=s[i]&&i<=n)
                cout<<ma[s[i]],i++;
            while(i<=n)
                cout<<s[i],i++;
            break;
        }
        else cout<<s[i],i++;
    }
    return 0;
}
View Code

 

大神简洁的写法:

技术图片
#include <bits/stdc++.h>
using namespace std;

main()
{
    int n; cin>>n;
    string a; cin>>a;
    char f[256]; for (int i=1,j; i<=9; ++i) cin>>j,f[0+i]=0+j;

    int i=0;
    while (i<n && a[i]>=f[a[i]]) ++i;
    while (i<n && a[i]<=f[a[i]]) a[i]=f[a[i]],++i;

    cout<<a;
}
View Code

 

 





以上是关于560 div3 B. Long Number的主要内容,如果未能解决你的问题,请参考以下文章

B. Long Number1300 / 简单的贪心

Codeforces Round #560 div3 (C,D)

Div3 C good number easy version

CF Round #627 div3

B. Captain Flint and a Long Voyage1000 / 构造

B. The Number of Products