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)