nyoj135 取石子(二) Nimm博弈
2017-02-24 09:28
337 查看
思路:计算每堆石子的SG值,然后异或得到总的SG值,如果SG=0则输,否则赢。
每堆石子的SG值等于m%(n+1),可以自己推算一下。
AC代码
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <utility>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
#define eps 1e-10
#define inf 0x3f3f3f3f
#define PI pair<int, int>
typedef long long LL;
const int maxn = 100 + 5;
int get_SG(int m, int n) {
return m % (n+1);
}
int main() {
int T, N, n, m;
scanf("%d", &T);
while(T--) {
scanf("%d", &N);
int res = 0;
for(int i = 0; i < N; ++i) {
scanf("%d%d", &m, &n);
res ^= get_SG(m, n);
}
if(res) printf("Win\n");
else printf("Lose\n");
}
return 0;
}
如有不当之处欢迎指出!
每堆石子的SG值等于m%(n+1),可以自己推算一下。
AC代码
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <utility>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
#define eps 1e-10
#define inf 0x3f3f3f3f
#define PI pair<int, int>
typedef long long LL;
const int maxn = 100 + 5;
int get_SG(int m, int n) {
return m % (n+1);
}
int main() {
int T, N, n, m;
scanf("%d", &T);
while(T--) {
scanf("%d", &N);
int res = 0;
for(int i = 0; i < N; ++i) {
scanf("%d%d", &m, &n);
res ^= get_SG(m, n);
}
if(res) printf("Win\n");
else printf("Lose\n");
}
return 0;
}
如有不当之处欢迎指出!
相关文章推荐
- NYOJ 135 取石子(二)(巴什博奕+尼姆博弈)
- NYOJ135 取石子(二)尼姆博弈+巴什博奕
- NYOJ 135 取石子(二)(尼姆博奕+巴什博奕)
- NYOJ-135 取石子(二) (巴什博奕 + 尼姆博弈)
- nyoj 135 取石子(二) 【NIM】
- nyoj 135 取石子(二) 【NIM】
- nyoj-135-取石子(二)
- NYOJ135 取石子(二)
- nyoj585 取石子(六) Nimm博弈
- NYOJ 135 取石子(二) (巴什博弈+尼姆博弈)(SG函数)
- NYOJ 135 取石子(二)
- nyoj888 取石子(九) 反Nimm博弈
- nyoj913 取石子(十) SG函数 + Nimm博弈
- NYOJ135 取石子(二)(尼姆博奕+巴什博奕)
- NYOJ 题目135取石子(二)(博弈)
- NYOJ 135 取石子(二)(博弈)
- nyoj 取石子(二) 135 (博弈&&思想)
- NYOJ 135 取石子(二) (sg规律)
- NYOJ-取石子(六)
- nyoj 737 石子合并(一)(区间DP)