HDU1846 Brave Game 题解
本题是一道有向图博弈问题:
该题便是著名的巴什博弈;
我们可以发现,当n=0的时候后手必胜(设其为P态),n=1~m这几种状态由于先手可以一次全部取完导致先手必胜(设其为N态)。
接着当n=m+1时,因为先手无论取走几个都会使后手一次全部取走导致后手必胜;
接着当n=m+2~2*m时,因为先手可以一次就将石子取剩m+1个,导致无论后手取几个,最后都会使先手一次全部取完,导致先手必胜。
......
综上所述,不难发现一个人想要获胜就要把对方逼到当对方选择时棋子剩m+1的倍数个,由于先手的先发性,只要n!=(m+1)的倍数,先手就一定可以一次就把石子取到剩(m+1)的倍数个,不断逼使后手一直走必败路线。
所以当n%(m+1)=0时,后手必胜,否则先手必胜。
#include <bits/stdc++.h> using namespace std; int main () { int t; cin>>t; while(t--){ int n,k; scanf("%d%d",&n,&k); if(n%(k+1)==0){ printf("second\n"); } else{ printf("first\n"); } } }
众人皆醉我独醒,举世皆浊我独清