개념
A. 승리 상태와 상실 상태
- 승리 상태 (N), 이길이 상태를면에서 최적의 전략.
- 이 상태를 잃게됩니다 최적의 정책을 마주 상태 (P)를 잃는.
두 .SG 기능
- MEX 동작 : 최소 요건은 음이 아닌 정수의 집합에 속하지 않는 것으로 정의된다.
- X는 상태를 나타내고, SG (X). X는 주 경우에만 SG (X) = 0 인 경우 운명;
- 모든 x는 (합법적이어야 함) 한 단계의 상태에 도달 할 수 있습니다 이동에 대한 S를 보자. 이어서 (X) = MEX (SG (Y) ()의 Y의 ∈ S) $ $ SG의 존재
- 폭력 속임수 포인트를 찾을 수 있습니다, 주로 법을 찾기 위해 테이블을 명중
세 .SG 정리
- SG와 SG 기능의 게임은 서로의 모든 하위 게임 독립적 인 모든 서브 게임 XOR의 기능 곳입니다.
- 그리고 독점의 각 더미 돌 SG 기능 또는 0이 아닌 경우에만 경우에 따라서 우세 승리.
예
매치 게임을 가지고
분석
- SG는 SG의 ^ A1 A2 A3 ^ ^ ... = ^. 당신의 SG ==를 분실 한 경우 0 제공된 초기 상태 정리하여 판단
- 당신이 이길 경우는 A1 A를되도록, '특정 A1이 제거 된 가정한다. 은 '^ ^ A2, A3 ... ^ ^ = 0 = SG가 ^ SG = SG ^ ^ A1 A2 A3 ^ ^ ... ^;
- 따라서 SG ^ A1 = A '와 A1>해야.';
- 그래서 SG ^ AI <AI 일단 제가 제거되는 제 스택 인공 지능 인 - SG ^는 인공 지능.
#include<iostream>
#include<cstdio>
#include<cmath>
#include<queue>
#include<cstring>
#include<algorithm>
#define lson x<<1
#define rson x<<1|1
#define ll long long
#define rint register int
#define mid ((L + R) >> 1)
using namespace std;
template <typename xxx> inline void read(xxx &x) {
char c = getchar(),f = 1;x = 0;
for(;c ^ '-' && !isdigit(c);c = getchar());
if(c == '-') c = getchar(),f = -1;
for(;isdigit(c);c = getchar()) x = (x<<1) + (x<<3) + (c ^ '0');
x *= f;
}
template<typename xxx>void print(xxx x)
{
if(x<0){putchar('-');x=-x;}
if(x>9) print(x/10);
putchar(x%10+'0');
}
const int maxn = 500010;
const int inf = 0x7fffffff;
const int mod = 1e9 + 7;
int SG;
int n,a[maxn];
int main()
{
read(n);
for(rint i = 1;i <= n; ++i) read(a[i]),SG ^= a[i];
if(!SG) {//当前即是必败态
printf("lose\n");
return 0;
}
for(rint i = 1;i <= n; ++i) {
if((SG ^ a[i]) < a[i]) {
printf("%d %d\n",a[i] - (SG ^ a[i]),i);
for(rint j = 1;j <= n; ++j) {
if(i ^ j) print(a[j]);
else print(a[i] ^ SG);
putchar(' ');
}
return 0;
}
}
return 0;
}