NC15066. 小牛再战
描述
共有N堆石子,已知每堆中石子的数量,两个人轮流取石子,每次只能选择N堆石子中的一堆取一定数量的石子(最少取一个),取过子之后,还可以将该堆石子中剩余的石子随意选取几个放到其它的任意一堆或几堆上。等哪个人无法取子时就表示此人输掉了游戏。注意:一堆石子没有子之后,就不能再往此处放石子了。
假设每次都是小牛先取石子,并且游戏双方都绝对聪明,现在给你石子的堆数、每堆石子的数量,请判断出小牛能否获胜。
输入描述
可能有多组测试数据(测试数据组数不超过1000)
每组测试数据的第一行是一个整数,表示N(1<=N<=10)
第二行是N个整数分别表示该堆石子中石子的数量。(每堆石子数目不超过100)
当输入的N为0时,表示输入结束
输出描述
对于每组测试数据,输出Win表示小牛可以获胜,输出Lose表示小牛必然会败。
示例1
输入:
3 2 1 3 2 1 1 0
输出:
Win Lose
C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 412K, 提交时间: 2023-07-27 18:42:59
#include<bits/stdc++.h> #define rep(i,s,e) for(int i=s;i<e;++i) using namespace std; int main() { int n; while(cin>>n&&n) { int q,s(0); rep(i,0,n) cin>>q,s^=q; puts(s||n&1?"Win":"Lose"); } }
C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 404K, 提交时间: 2020-01-28 15:33:46
#include<bits/stdc++.h> #define rep(i,s,e) for(int i=s; i<e; ++i) using namespace std; int main(){ int n; while(cin>>n&&n){ int q,s(0); rep(i,0,n) cin>>q,s^=q; puts(s||n&1?"Win":"Lose"); } }
Python3(3.5.2) 解法, 执行用时: 32ms, 内存消耗: 3328K, 提交时间: 2018-02-04 21:45:01
while True: n = int(input()) if n == 0: break x = 0 for i in range(n): x ^= int(input()) print("Win" if x else "Lose")
pypy3 解法, 执行用时: 120ms, 内存消耗: 25808K, 提交时间: 2022-04-03 18:23:36
while 1: n = int(input()) if n == 0: break t = 0 for _ in range(n): t ^= int(input()) print("Win" if t else "Lose")