bzoj1794:[Ioi2008]Linear Garden

来源:互联网 发布:淘宝充值刷信誉有用吗 编辑:程序博客网 时间:2024/06/05 22:43

传送门
将两种植物化作1和-1
发现后缀只会出现0,1,-1,2,-2
二进制压位存状态。
然后大力状压dp驶过。

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<cstdlib>using namespace std;int n,mo,c,ans,d[2][32][2];char s[1000100];int id(char ch){return ch=='L'?0:1;}int main(){    scanf("%d%d%s",&n,&mo,s+1);    d[c][4][1]=1;    for (int i=1;i<=n;i++){        c^=1;        memset(d[c],0,sizeof(d[0]));        for (int j=0,jj;j<32;j++)            for (int k=0,kk;k<2;k++)                for (int l=0;l<2;l++){                    if ((j&16)&&l) continue;                    if ((j&1)&&!l) continue;                    if (id(s[i])<l&&k) continue;                    kk=(id(s[i])==l&k)?1:0;                    jj=j;                    if (l) (jj<<=1)|=8;                    else (jj>>=1)|=2;                    (d[c][jj][kk]+=d[1-c][j][k])%=mo;                }    }    for (int i=0;i<32;i++)        for (int j=0;j<2;j++)            (ans+=d[c][i][j])%=mo;    printf("%d",ans);}
原创粉丝点击