Day11 - O - Coin Game HDU - 3951
思路:考虑第一个人取的方式:
1.每次能取的次数>= n, 一次取完 first win
2.每次能取1个,n是奇数 first win
3.一次取不完,这种情况下也分2种情况
1)second能一次取完, second win
2)second不能一次取完,则他取一次使得这个链至少有一个部分是能一次取完的
若2个部分都是一次取完的,second win
若1个部分是一次取完的,另一个部分不行,又分两种情况
#1first选择取可以取完的那一堆,那么状况又回到了second取一堆不可以一次取完的,递归回取
#2first选择取不可以取完那一堆的,这时候又有2种情况
$1first取了一次后变成一堆可以一堆不可以,second必可以取不可以的那一堆,又回到上一情况,且此时剩下至少2个可以一次取完的,second win
$2取了一次后变成2堆可以的,按顺序取完后至少有2个可以一次取完的,second win
综上,只要不满足1、2条件,first必输
#include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef long long LL; void run_case() { int n, t; cin >> n >> t; if((t == 1 && n % 2) || t >= n) cout << ": first\n"; else cout << ": second\n"; } int main() { ios::sync_with_stdio(false), cin.tie(0); int t; cin >> t; for(int i = 1; i <= t; ++i) { cout << "Case " << i;run_case(); } cout.flush(); return 0; }