您的位置:首页 > 其它

UVA 11859 - Division Game(Nim游戏)

2015-08-23 09:39 363 查看


UVA 11859 - Division Game

题目链接

题意:给定一个矩阵。每次能选一行中几个数字,把他们变成他们的因子,最后不能变的人输。问能否先手必胜

思路:转变成因子等价于删去一些素数。这样问题转化为了Nim游戏

代码:

#include <stdio.h>
#include <string.h>

const int N = 10005;
int t, n, m, num, cnt
, vis
, prime
, pn = 0;

int main() {
for (int i = 2; i < N; i++) {
if (vis[i]) continue;
prime[pn++] = i;
for (int j = i; j < N; j += i) {
vis[j] = 1;
}
}
for (int i = 2; i < N; i++) {
int num = i;
for (int j = 0; j < pn && prime[j] <= i; j++) {
while (num % prime[j] == 0) {
cnt[i]++;
num /= prime[j];
}
}
}
int cas = 0;
scanf("%d", &t);
while (t--) {
int ans = 0;
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++) {
int sum = 0;
for (int j = 0; j < m; j++) {
scanf("%d", &num);
sum += cnt[num];
}
ans ^= sum;
}
printf("Case #%d: %s\n", ++cas, ans == 0?"NO":"YES");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: