标签:状态压缩 with force bre ace codeforce https contest return
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)
标签:状态压缩 with force bre ace codeforce https contest return
原文地址:https://www.cnblogs.com/CADCADCAD/p/12266127.html