HDU4994-Revenge of Nim(博弈)

来源:互联网 发布:航信开票软件下载 编辑:程序博客网 时间:2024/05/16 11:19

题目链接


题意:有n堆石子,每个堆有Ai个石头,求先手是否能取得最后一个石头。

思路:这题主要在于前置1的多少能改变谁能成为先手,当前置1为偶数时,先手还是原来的先手,当为奇数时,先手就变成后手,后手变成先手。记得考虑当所有石堆都只有一个石头的情况。

代码:

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef __int64 ll;//typedef long long ll;const int MAXN = 1005;int arr[MAXN];int main() {    int cas;    scanf("%d", &cas);    while (cas--) {        int n;         scanf("%d", &n);        ll a;        for (int i = 0; i < n; i++)            scanf("%I64d", &arr[i]);         int cnt = 0, flag = 1;        for (int i = 0; i < n; i++) {            if (arr[i] == 1)                cnt++;            if (arr[i] != 1) {                flag = 0;                break;            }        }        if (cnt % 2 == 0) {            if (flag)                printf("No\n");            else                 printf("Yes\n");        }        else {            if (flag)                printf("Yes\n");            else                printf("No\n");        }    }    return 0;}


0 0