【UVa 12499】 I am Dumb 3

題目鏈接:【UVa 12499】 I am Dumb 3


題意:Nim問題,有n堆石子,a1<=a2<=a3........<=an<=L.兩個人輪流給任意一堆添加石子,保證每堆石子的數量符合上述條件,如果當前這個人不能給任何堆添加石子就算輸,問,是第一個人贏還是第二個人贏。

思路:將每堆石子數量的差值異或,值爲0就代表第一個下手的人輸。

code:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int a[25];
int n,L;
int main()
{
    int t;
    int cnt=1;
    scanf("%d",&t);
    while(t--)
    {
        int ans=0;
        scanf("%d%d",&n,&L);
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        a[n]=L;
        for(int i=0;i<n;i+=2)
        {
            ans^=a[i+1]-a[i];
        }
        printf("Case %d: ",cnt++);
        if(ans)
            printf("First Player\n");
        else
            printf("Second Player\n");
    }
    return 0;
}


發佈了68 篇原創文章 · 獲贊 9 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章