Ural1540 Battle for the Ring
2016-12-11 19:22
447 查看
区间DP+SG函数
看到代码淦过去的时候我的内心是崩溃的…
明明O(n^4)啊。。
看到代码淦过去的时候我的内心是崩溃的…
明明O(n^4)啊。。
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> using namespace std; char c; inline void read(int&a) { a=0;do c=getchar();while(c<'0'||c>'9'); while(c<='9'&&c>='0')a=(a<<3)+(a<<1)+c-'0',c=getchar(); } const int M=15,N=(1<<M)-1,C=30; int Low[1<<M]; int Val[C+1]; struct Rec { int Len; int R[13]; void clear(){Len=0;memset(R,0,sizeof(R));} Rec(){Len=0;memset(R,0,sizeof(R));} Rec(int L){Len=L/C+1;memset(R,0,sizeof(R));} void Unclear() { for(int i=0;i<7;i++)R[i]=(N<<15)|N; } void Cg(int no,int da) { int W=no/C; int D=no%C; if(!da) R[W]=(R[W]|Val[D])^Val[D]; else R[W]=(R[W]|Val[D]); } int ck(int no) { int W=no/C; int D=no%C; return R[W]&Val[D]; } int LowBit() { for(int i=0;i<Len;i++) if(Low[R[i]&N]) return Low[R[i]&N]+i*C; else if(Low[R[i]>>M]) return Low[R[i]&N]+i*C+M; return 0; } }; struct Chain { int n; int V[101]; int Sol[101][101]; int F(int x,int y) { if(y<x)return 0; int &A=Sol[x][y]; Rec SG; SG.Len=302; SG.Unclear(); if(A)return A; for(int i=x;i<=y;i++) { int l=x,tp=0; for(int j=x;j<=y;j++) if(V[j]<=V[i]) tp^=F(l,j-1),l=j+1; tp^=F(l,y); SG.Cg(tp,0); } int i; for(i=0;!SG.ck(i);i++);A=i; // printf("%d %d %d\n",x,y,A); return A; } int get() { read(n); for(int i=1;i<=n;i++)read(V[i]); return F(1,n); } int A(int S) { S^=Sol[1] ; Rec SG(302); for(int i=1;i<=n;i++) { int l=1,tp=0; for(int j=1;j<=n;j++) if(V[j]<=V[i]) tp^=F(l,j-1),l=j+1; tp^=F(l,n); if(tp==S) return i; } return SG.LowBit(); } }L[51]; int main() { Val[0]=1; for(int i=1;i<=14;i++)Low[Val[i]=Val[i-1]<<1]=i; for(int i=14;i<=30;i++)Val[i]=Val[i-1]<<1; for(int i=1;i<=N;i++)Low[i]=Low[i&-i]; int n,T=0,tt; read(n); for(int i=1;i<=n;i++)T^=(tt=L[i].get()); if(!T){puts("S");return 0;} puts("G"); for(int i=1;i<=n;i++) { int t=L[i].A(T); if(t){printf("%d %d\n",i,t);return 0;} } return 0; }
相关文章推荐
- Ural 1540. Battle for the Ring
- URAL-1991 The battle near the swamp 水题
- (校赛)URAL 1991 The battle near the swamp
- Facebook vs. Google: The battle for the future of the Web
- Ural 1991 The battle near the swamp
- URAL 1997 Those are not the droids you're looking for(二分图)
- URAL 1991 The battle near the swamp 水题
- Ural 1997-Those are not the droids you're looking for 二分图匹配
- Post-quantum key exchange for the TLS protocol from the ring learning with errors problem
- URAL1997-Those are not the droids you're looking for
- URAL_1789_Searching for the Dodecahedron_机智
- URAL1991 The battle near the swamp
- URAL 1991. The battle near the swamp
- URAL1991-The battle near the swamp
- Plan for the next week
- C++: The Most Powerful Language for .NET Framework Programming
- 《Premier.Press.Microsoft.Windows.Shell.Script.Programming.for.the.Absolute.Beginner》
- compile the mod_gsoap of apache2 for win32
- for debugging on site,the web.config should be edited as follows