[ZOJ3591] Nim && 博弈+计数
2015-01-11 22:34
281 查看
构造一个SG函数前缀和 设前缀和值相同的两元素i ,j 那么(i+1, j)就是一个必败态 减去即可
#include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<map> #define SF scanf #define PF printf #define max(a, b) ((a) < (b) ? (b) : (a)) using namespace std; typedef long long LL; const int MAXN = 100000; int s[MAXN+10], a[MAXN+10], n, S, W; map <int, int> M; void Make_a() { int g = S; for (int i=1; i<=n; i++) { a[i] = g; if( a[i] == 0 ) { a[i] = g = W; } if( g%2 == 0 ) { g = (g/2); } else { g = (g/2) ^ W; } } } int main() { int T; SF("%d", &T); while(T--) { SF("%d%d%d", &n, &S, &W); Make_a(); for(int i = 1; i <= n; i++) s[i] = s[i-1] ^ a[i]; M.clear(); M[0] = 1; LL Fail = 0; for(int i = 1; i <= n; i++) { if(M.count(s[i])) { Fail += M[s[i]]; M[s[i]]++; } else M[s[i]] = 1; } cout << (LL)n * (n + 1) / 2 - Fail << '\n'; } }
相关文章推荐
- 斐波那契博弈(Fibonacci&nbsp;Nim)
- HDOJ 题目1566&题目1544 S-Nim(sg博弈模板)
- 【HDU3032】【Lasker's Nim(一种Nim游戏)】Nim or not Nim? Multi-SG博弈、打表
- BZOJ:2819 NIM(树链剖分||DFS序 &&NIM博弈)
- HDU 1536 && HDU 1944 S-Nim (Nim博弈、SG函数模板)
- 博弈论 (Nim 博弈)—— HDU 1907 && HDU 2509
- HDU 2509 Be the Winner && HDU 1907 John (Nim博弈变形)
- hdu 1907 && hdu 2509(Nim博弈)
- hdu 2509 Be the Winner(博弈Nim)
- 博弈入门—NIM&SG
- hdu 1907 John&& hdu 2509 Be the Winner(基础nim博弈)
- POJ2975 & ZOJ3067 Nim [基础Nim博弈]输出方法
- hdu1536 & 1944 S-NIM 博弈 SG函数
- zoj3591 Nim(Nim博弈)
- HDU1907 && HDU2509_Nim博弈变形
- ACM学习历程—HDU 3915 Game(Nim博弈 && xor高斯消元)
- 博弈之 Nim 游戏&poj 3537 Crosses and Crosses
- [博弈]ZOJ3591 Nim
- Hdu 1907 && Hdu2509 (nim博弈的相反胜况)
- 博弈——Nim&SG函数函数(hdu1848)