状态压缩——2019 CTU G

Posted zsben991126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了状态压缩——2019 CTU G相关的知识,希望对你有一定的参考价值。

符合条件的串:最多只能有一个字符出现次数是奇数次 
设置一个26位状态表示 字符i出现情况:0出现偶数次|1出现奇数次
i:0->n-1 求出s[0..i]所代表的状态mask, 设满足条件的一个前缀s[0..pre]的状态是mask1
    那么 count(mask^mask1)<=1
所以只要把mask每位轮流异或一个1,然后把状态用pre[]存起来,pre[i]表示状态i最早出现的位置 
*/
#include<bits/stdc++.h>
using namespace std;
#define N 1000005

int n;
char s[N];
int pre[1<<26];

int main(){
    cin>>n>>(s+1);
    int mask=0,ans=0;
    memset(pre,-1,sizeof pre);
    pre[mask]=0;
    for(int j=0;j<26;j++)
        if(pre[mask^(1<<j)]==-1)
            pre[mask^(1<<j)]=0;
             
    for(int i=1;i<=n;i++){
        mask^=(1<<(s[i]-a));
        
        if(pre[mask]!=-1)
            ans=max(ans,i-pre[mask]);
        else pre[mask]=i;
                
        for(int j=0;j<26;j++)
            if(pre[mask^(1<<j)]==-1)
                pre[mask^(1<<j)]=i; 
    }
    cout<<ans<<
;
}

 

以上是关于状态压缩——2019 CTU G的主要内容,如果未能解决你的问题,请参考以下文章

[ICPC训练联盟周赛1] CTU Open Contest 2019

北京网络赛G BOXES 状态压缩+有序BFS+高维数组判重

[BZOJ2734][HNOI2012] 集合选数(状态压缩+思维)

迷宫寻宝 ---- 状态压缩

当通知进入android时如何获取Bundle数据

2019 ICPC Malaysia National F(状态压缩)