题解:P9278 [AGM 2023 资格赛] 另一个游戏
lailai0916 · · 题解
解题思路
这是一道博弈论题,可以倒推求解:
- 在只剩
2 堆时获得先手,就能把第n-1 堆全部移完,把第n 堆留给对手,即可赢得比赛。 - 为了在只剩
2 堆时获得先手,要在只剩3 堆的时候获得先手,并移走第n-2 堆中的v_{n-2}-1 个,使对手只能移走最后1 个。 - 不难发现,获得第
k 堆的先手,就可以获得k+1 堆的先手。所以只要获得第2 堆的先手即可获胜。 - 因为题目是将第
1 堆移到第2 堆,且每一堆都是正整数,所以从第2 堆开始,后面不会出现只有1 个石子的情况。 - Charlie 开局是先手,只要第
1 堆不只1 个,都可以移走v_1-1 个,使 Dan 只能移走最后1 个。
综上所述,只要开局 Charlie,否则输出 Dan。
参考代码
#include <bits/stdc++.h>
using namespace std;
const int N=1005;
int v[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>v[i];
cout<<(v[1]!=1||n==2?"Charlie":"Dan")<<'\n';
return 0;
}