1. 程式人生 > >HDU - 6266 - HDU 6266 Hakase and Nano (博弈論)

HDU - 6266 - HDU 6266 Hakase and Nano (博弈論)

hdu 一次 都是 有一個 類型 center ade printf 博弈

題意:

有兩個人從N個石子堆中拿石子,其中一個人可以拿兩次,第二個人只能拿一次。最後拿完的人勝利。

思路:

類型 Hakase先 Hakase後
1 W L
1 1 W W
1 1 1 (3n) L W
1 1 1 1 (3n+1) W L
1 1 1 1 1 (3n+2) W W
類型 Hakase先 Hakase後
X 1 1 W L
X Y 1 W W
X Y Z W W
X 1 1 1 W L
X Y 1 1 W W
X Y Z 1 W W
X 1 1 1 1 W W
X Y 1 1 1 W W

1.若n = 3t,若每個石子堆都是1,A先手必輸(1 1 1)。只有一個數量大於1的石子堆,則B先手A必輸(X 1 1)。

2.若n = 3t+1,若只有一堆柿子大於1(X 1 1 1)。則B先手A必輸。

按照結論寫代碼。。

代碼:

#include<iostream>

using namespace std;

int main() {
    int t, n, d;
    scanf("%d", &t);
    while(t--) {
        bool flag = true;
        int cnt = 0, a;
        scanf("%d %d", &n, &d);
        for(int i = 0; i < n; i++) {
            scanf("%d", &a); 
            if(a >= 2)
                cnt++;
        }
        int x = n % 3;
        if(x == 0) {
            if(cnt==0 && d==1)
                flag = false;
            if(cnt==1 && d==2)
                flag = false;
        }else if(x == 1){
            if(cnt<=1 && d==2)
                flag = false;
        }
        if(flag) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

HDU - 6266 - HDU 6266 Hakase and Nano (博弈論)