HDU 6266 Hakase and Nano——思維
阿新 • • 發佈:2018-11-16
首先明確這是一個不公平的遊戲,作弊的那個人一定更有利,由此猜測所有作弊的人必勝,除非條件實在太差, 我們要找的就是這些作弊也挽回不了的局面,思考後可發現作弊的一方拿只有一個石子的石頭堆沒有辦法,因此從這上面出發,得到下面的結論:
1.先手時必勝,除非石子總數是三的倍數且每一堆都只有一個石子
2.後手時若對手能給你構造出第一種局面的話那麼你必敗,否則必勝
#include <bits/stdc++.h> using namespace std; const int maxn = 1e6 + 10; int T, n, d, a[maxn]; int main() { scanf("%d", &T); while (T--) { scanf("%d%d", &n, &d); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); } if (d == 1) { bool ok = true; for (int i = 1; i <= n; i++) { if (a[i] != 1) { ok = false; break; } } if (ok) { if (n % 3 == 0) puts("No"); else puts("Yes"); } else puts("Yes"); } else { int cnt = 0; bool ok = true; for (int i = 1; i <= n; i++) { if (a[i] == 1) cnt++; else ok = false; } if (ok) { if (n % 3 == 1) puts("No"); else puts("Yes"); } else { int x = n - cnt; if (x == 1 && (n % 3 == 1 || n % 3 == 0)) puts("No"); else puts("Yes"); } } } return 0; }