网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
02月15日
漏签
0
天
c++吧
关注:
599,453
贴子:
2,107,022
看贴
图片
吧主推荐
游戏
12
回复贴,共
1
页
<<返回c++吧
>0< 加载中...
求教,一道题。。
只看楼主
收藏
回复
噜噜侠
<
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
题目描述
阿珍和阿强在玩一种卡牌游戏,他们玩的很嗨,游戏规则如下:阿珍先手,每人操作一次,选取一张牌,把这张牌和所有小于这张它的牌拿走,若无法进行操作则失败。
输入输出格式输入格式:
有多组数据,对每组数据来说, 第一行一个数n,代表一共有几张牌(1<=n<=1000000) 第二行n个数,分别代表每张牌的点数Ai(1<=n<=1000000)。
输出格式:
一行,若阿珍胜利,则输出“Zhen”,否则输出“Qiang”。
输入输出
样例输入样例
#1:
3
2 3 3
2
2 2
输出样例#1:
Zhen
Qiang
琉璃心
|
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
阿珍爱上了阿强~
噜噜侠
<
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
。。。。
Con
<
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
应该只有所有卡片点数相同而且卡片数为双数时先手会输,等会给出证明
Con
<
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
不对,如果每个点数的牌均为双数先手也会输。
Con
<
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
先考虑所有点数的牌只有一张的情况,那么就略像Nim游戏,可以使用反证法。
如果后手决策Q能将局面变为S,作为先手的必败状态的话,那么先手决策Q一定能在第一步将局面变为S使后手必败,矛盾。
如果所有牌都是单数,那么最大牌就是单数,先手可以通过抓取最大牌使局面变为同一双数牌,达到必胜状态。
如果局面上有k(k不定)种单数牌,先手只需要拿掉最大的单数牌就可以达到局面上牌全为双数的局面。这个情况是必胜状态,因为每当对手选择一张牌,必定删除了比其小的牌并且将本牌变为单数,先手可以重新维持上述状态直到达到全局同一双数牌局面。
Con
<
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
上一个例子也证明了,如果所有牌都是双数牌,先手不管作何决策,后手都可以维持全局双数,直到达到同一双数牌局面导致先手失败。
Con
<
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
所以总的代码应该很简单,伪代码差不多长这样:
input n
even = false
input tmp
lst = tmp
for i in range(n-1):
if tmp ≠ lst and not even: 先手胜利; break
end
even = not even
end
后手胜利
程序狗-
&
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
题目自己做
Con
<
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
然而已经想出解法的我又回来看了一眼这个题目发现数据范围并不简单。。。正常的方法应该是套map或unordered_map,但是如果数据足够毒瘤的话每种牌只有两张而且前50万个全部是不一样的牌的话绕不开要50万个int。。
看起来map会爆时间,unordered_map又有可能爆内存。。貌似只能假定没有这么恶心的数据了。。。
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示