题目链接:
传送门

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;

int sto, k, t;
string name;

int main() {
	cin >> t;
	while(t--) {
		cin >> sto >> name;
		//最后拿石头输的情况
		if(name == "Alice") {
			if(sto % 3 == 1) {
				cout << "Case "<< ++k <<": Bob" << endl;
			} else {
				cout << "Case "<< ++k <<": Alice" << endl;
			}
		//最后拿石头赢的情况
		} else {
			if(sto % 3 == 0) {
				cout << "Case "<< ++k <<": Alice" << endl;
			} else {
				cout << "Case "<< ++k <<": Bob" << endl;
			}
		}
	}
}

首先讲最后拿石头输的情况,在石头数量为3的倍数+1的情况下,Alice无论拿1个还是2个石头,Bob都可以对应的拿2个或是1个,最后总会留给Alice一颗石头,此时Alice必输。但如果不是这种情况的话,Alice可以把这个局势转化为Bob先手且Bob必输的局面,此时Alice必赢。
然后讲讲最后拿石头赢的情况。如果石头数量为3的倍数,那么后手者只要拿3 - 先手所拿石子数个石子即可,此时一定保证后手一定拿到最后一颗石子。因此此时后手必赢。如果石头数量不为3的倍数的话,先手者就可以把自己转化为后手必赢的情况,所以其他时候先手赢。

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐