kuangbin 数学训练一 A Childhood Game
题目链接:传送门#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define ll long longusing namespace std;int sto, k, t;string name;int main()
·
题目链接:
传送门
#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的倍数的话,先手者就可以把自己转化为后手必赢的情况,所以其他时候先手赢。
更多推荐
所有评论(0)