BZOJ 1434: [ZJOI2009]染色游戏
一开始想这不$SG$裸题...然后发现100组数据...然后发现连通块是任意的求$SG$貌似要暴力枚举....
然后想了一下1维,手动打表,每次就是队当前所有异或后缀和求$mex$,好像就是$lowbit$的样子
然后2维就不会了...
看题解 什么!写个暴力打表!什么!2的幂
不管了抄结论行了.....
发现$i=1, j=1$真的需要手动打表的结果啊
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N=105; inline int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();} return x*f; } int n,m,ans[N<<1]; char s[N]; int Log[N]; inline void iniLog(){ Log[1]=0; for(int i=2;i<=200;i++) Log[i]=Log[i>>1]+1; } int main(){ freopen("in","r",stdin); int T=read(); iniLog(); while(T--){ m=read();n=read(); memset(ans,0,sizeof(ans)); for(int i=1;i<=m;i++){ scanf("%s",s+1); for(int j=1;j<=n;j++) if(s[j]!='H'){ if(i!=1 && j!=1) ans[i+j-2]^=1; else if(i==1) ans[ Log[ j&(-j) ] ]^=1; else ans[ Log[ i&(-i) ] ]^=1; } } int flag=0; for(int i=0;i<=n+m;i++) if(ans[i]) {flag=1;break;} if(flag) puts("-_-"); else puts("=_="); } }
Copyright:http://www.cnblogs.com/candy99/