ECFinal2021 K - Allin
这是一道非常有趣的题……
原题太长,不贴了
题意:
玩德州扑克,牌型就是德州扑克的牌,高牌顺子同花顺皇家同花顺啥的,52 张牌没有龟(王)
顺序是 2345678910JQKA ,需要注意的是如果能组成顺子或者同花顺,A 可以当 1
每次荷官先发 2 张牌到每个人手上,扣着,不让看(可以偷偷看自己的牌)
然后在发 3 张到桌中间,正面,可以看,然后再发一张正面,然后再发一张
在每发过一次牌后都可以下注
最后有 5 张在中间,每个人手里有 2 张,每个人都可以从自己手里 + 中间共 7 张牌中选任意五个,中间的牌可以被多个人选,但不同玩家的手牌不能互选
两个人选出的 5 张牌比较时,先比牌型(同花顺一定比炸弹大),再比特殊牌(33456 比 22456 大),再按剩下的字典序比(22456 比 22345 大),花色不考虑
如果一个人大,他就赢了,两个人一样则没有人赢
现在两个高手 pk ,其中一个高手比较牛b,它只在中间 3 张发完的时候下注,且如果不论剩下要发的 2 张牌和对面的 2 张手牌是什么,他都能赢(平局不算),那就 allin ,否则 check
给你这个人的 2 张牌和发过的 3 张牌,问你他是 allin 还是 check
题意完毕
这个题的题面非常恐怖,高达 5 页,但实际上有 3 页都是在告诉你牌型,真正需要看的不到 2 页
当你准备开始暴力的时候,你会惊喜地发现输入组数 1e5 ,暴搜绝对跑不过
这题披着游戏题的皮,实际上是一个思维题
需要注意到,只有当输入的 5 张牌恰好是一把同花顺的时候才有可能 allin ,否则必 check
(同花顺是仅次于皇家同花顺 10JQKA 的最大牌型)
因为可以注意到一个性质,我们可以构造的牌有 4 张,而一张同花顺也就 5 张而已,非常好构造
(注意,根据题意,我们但凡能构造一个不能胜利的局面,就应该 check ,这里一定要想清楚)
为什么不能是前 5 张牌提供部分牌,再和桌中间剩下的 2 张组成同花顺呢?
因为可以构造:4 张牌全一样,直接给你来个炸弹(四带一),不给你凑同花顺的机会
(四带一是次于同花顺的第二大)
那么输入的 5 张牌可以分为 3 种情况:
① 同花顺
这个一会枚举判断
② 四带一
易证此时对面必可以做出同花顺
③ 其他的牌
炸弹带走,赢麻了
最终我们只需要考虑 5 张牌全是同花顺的情况
由于同花顺是最大的(皇家同花顺其实也是一种同花顺),因此要用同花顺打败同花顺
可以发现构造的 4 张牌不能自成另一个花色的同花顺,因此必须和前面的 5 张同色
接下来就好办了,只需从比前 5 张同花顺大的同花顺开始,枚举对面的同花顺,再检查是否能凑成就行了
坑:
- 注意 A2345 是合法顺子
仔细看题啊,这个信息埋藏在长达 3 页的牌型枚举里,还真容易漏
- 注意 45 32A (45 在手里,32A 在桌中间)的答案是 check
因为 A 可以被拿去凑成皇家同花顺,这里 A 同时出现了两种含义所以非常容易漏判
最后我就是这里没想出来,和买志斌一起 WA 麻了,还得多谢比赛结束后尧神和他的队友帮我指出才想明白
就差这一点,最后还是打铁了,蛋疼啊
代码很好写,不贴了