小牛再战(博弈论)

阅读: 评论:0

小牛再战(博弈论)

小牛再战(博弈论)

题目描述

共有N堆石子,已知每堆中石子的数量,两个人轮流取石子,每次只能选择N堆石子中的一堆取一定数量的石子(最少取一个),取过子之后,还可以将该堆石子中剩余的石子随意选取几个放到其它的任意一堆或几堆上。等哪个人无法取子时就表示此人输掉了游戏。注意:一堆石子没有子之后,就不能再往此处放石子了。

假设每次都是小牛先取石子,并且游戏双方都绝对聪明,现在给你石子的堆数、每堆石子的数量,请判断出小牛能否获胜。

输入描述:

可能有多组测试数据(测试数据组数不超过1000)
每组测试数据的第一行是一个整数,表示N(1<=N<=10)
第二行是N个整数分别表示该堆石子中石子的数量。(每堆石子数目不超过100)
当输入的N为0时,表示输入结束

输出描述:

对于每组测试数据,输出Win表示小牛可以获胜,输出Lose表示小牛必然会败。

示例1

输入

3
2 1 3
2
1 1
0

输出

Win
Lose

备注:

提示:
例如:如果最开始有4堆石子,石子个数分别为3 1 4 2,而小牛想决定要先拿走第三堆石子中的两个石子(石子堆状态变为3 1 2 2),然后他可以使石子堆达到的状态有以下几种:
3 1 2 2(不再移动石子)
4 1 1 2(移动到第一堆一个)
3 2 1 2(移动到第二堆一个)
3 1 1 3(移动到第四堆一个)
5 1 0 2(全部移动到第一堆)
3 3 0 2(全部移动到第二堆)
3 1 0 4(全部移动到最后)

题解:

首先考虑最简单的情况:1 1 。毫无疑问,小牛必败。然后拓展,1 2,这时是必胜。小牛可以把2里拿个一走,把必败局给小客。然后 2 2,还是必败,无论怎么动都会给小客必胜局面;再看 1 1 1,必胜;1 2 1,必败;1 2 2;必胜。

此时规律很明显了,必败和必胜相互转换,只要多一步就可以把局面给对方。总结一下,1 1,2 2,这样的只含有双数相同堆的,必败;只要含有一个奇数相堆,必败就是对方的,就必胜了。

/*keep on going and never give up*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define fast std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
inline int read()
{int x=0,k=1; char c=getchar();while(c<'0'||c>'9'){if(c=='-')k=-1;c=getchar();}while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+(c^48),c=getchar();return x*k;
}
const double e = exp(1);
const double PI = acos(-1.0);
const int maxn=4e5+10;
const int mod=1e9+7;
int head[maxn],cnt,n,m,s,vis[maxn],dis[maxn];
signed main(){while(cin>>n&&n){memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++) vis[read()]++;bool f=1;for(int i=1;i<=101;i++) if(vis[i]&1) { f=0;break;}if(f) printf("Winn");else printf("Losen");}
}

本文发布于:2024-02-01 18:49:16,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170678456038715.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:小牛   再战   博弈论
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23