String Coloring (hard version)

Posted cadcadcad

tags:

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

E2. String Coloring (hard version)

首先我们要明确一点,最多只会出现26种颜色,因为当下字母s[i]如果在后面s[>i]出现过,那么在 i 这个位置的最佳颜色选择即为先前确定的颜色。所以我们可以使用状态压缩来记录状态。

// Created by CAD on 2020/2/5.
#include <bits/stdc++.h>
using namespace std;

int a[200005];
int x[27];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;cin>>n;
    string s;cin>>s;
    int maxn=0;
    for(int i=n-1;i>=0;--i){
        int flag=0;
        for(int j=s[i]-'a';j>=1;--j)
            flag|=x[j];
        for(int k=0;k<=25;++k)
            if((1<<k)&flag) continue;
            else {
                x[s[i]-'a'+1]|=1<<k;
                a[i]=k;
                maxn=max(maxn,k);
                break;
            }
    }
    cout<<maxn+1<<endl<<a[0]+1;
    for(int i=1;i<n;++i)
        cout<<" "<<a[i]+1;
    cout<<endl;
    return 0;
}

以上是关于String Coloring (hard version)的主要内容,如果未能解决你的问题,请参考以下文章

CF1296E2 String Coloring (hard version)

Codeforces 1296E2 - String Coloring (hard version)

Codeforces 1296E2 String Coloring (hard version)(LIS,思维)

Codeforces1594 E2. Rubik‘s Cube Coloring (hard version)(思维+dp记忆化搜索)

AtCoder Grand Contest #026 C - String Coloring

Codeforces Round #617 (Div. 3) E1. String Coloring (easy version)