首页 > ACM题库 > HDU-杭电 > hdu 3066 火拼双扣待解决[解题报告]C++
2014
03-01

hdu 3066 火拼双扣待解决[解题报告]C++

火拼双扣

问题描述 :

小明是一个不求上进的孩子,非常喜欢玩QQ游戏的双扣,但是小明的老婆却喜欢玩火拼双扣,没办法,谁让小明家是老婆最大呢,小明只能每天陪着老婆玩火拼双扣了。
在这里呢,小明还是先唠叨下火拼双扣的规则,以统一一下游戏规则,也避免了有些要求上进的同学没玩过不知道游戏规则。
由于题目的需求,规则我们只讲合法牌型和出牌大小。
1.牌型
单张:任意一张单牌。
顺子:任意五张或者五张以上点数相连的牌, 2 和小王不能出现在顺子中。
对子:任意两张点数相同的牌。
连对:三对或三对以上点数相连的牌,如: 556677 。 2 和小王不能出现在连对中。
三张:任意三张点数相同的牌。
连三张:三个或三个以上点数相连的三张牌,如: 5556 66777 。 2 和小王不能出现在连对中。
炸弹:四张或四张以上点数相同的牌,如: 6666 6 。
三王炸弹:任意三个王的牌型。
天王炸弹:四张王牌。
X 相炸弹: X 张同样的牌组成的炸弹( 4<=X<=8 )。如: 777777 ( 6 相炸弹)。
X 相 Y 连环 炸弹: Y 组点数相连 (3<=Y<=6) 且牌数同为 X 的炸弹。如 777778888 8999 99 ( 5 相 3 连环 炸弹) 2 和小王不能出现在此牌型中。
大王的特殊作用
大王(包括两个大王)和别的牌型一起出的时候,可以做任意一张满足牌型需要的万能牌。如果大 王可 以替代的牌存在一种以上的选择的时候,则选择大的牌型为优先。
例如:
7777 +大王= 77777
45678 +大王= 456789 (注意不是 3456 78 )
77899 +大王= 778899
77 + 8 + 9 +大王+大王= 778899
2 . 牌型的比较
特殊的牌型或者特殊牌型的组合,都对应相应的星级。手中有几星级的牌,关系到游戏中的翻倍分数、贡献分数;同时星级也是特殊牌型大小比较的标准。
星级的分类和定义:
特殊牌型:
三王炸弹: 6 星级。
天王炸弹: 7 星级。
根据单个炸弹牌型分:
X 相炸弹:等同于 X 星级。如: 6666 66 为 6 相炸弹等同于 6 星级。
根据 X 相 Y 连环 炸弹牌型分:星级= X+Y
具体对应星级如下:
4 相 3 连环 炸弹: 7 星。
4 相 4 连环 炸弹: 8 星。
4 相 5 连环 炸弹: 9 星。
4 相 6 连环 炸弹: 10 星。
5 相 3 连环 炸弹: 8 星。
5 相 4 连环 炸弹: 9 星。
5 相 5 连环 炸弹: 10 星。
6 相 3 连环 炸弹: 9 星。
6 相 4 连环 炸弹: 10 星。
7 相 3 连环 炸弹: 10 星。
8 相 3 连环 炸弹: 11 星。
点数的大小:
从大至小以次为:F(大王)、f(小王)、 2 、 A 、 K 、 Q 、 J 、 T(10) 、 9 、 8 、 7 、 6 、 5 、 4 、 3
炸弹:
炸弹大于任何其他非炸弹的牌型。
同为炸弹的牌型,先按照星级比较大小;如果星级相同,则按照牌的数量比较大小,数量越少的越大;如过数量相同,则按照牌型中最大牌的点数比较大小。
特殊:天王炸弹是 7 星牌里面最大的牌型,三王炸弹是 6 星牌里面最小的牌型。
由于小明打牌很差劲,所以他每次都是点提示出牌,而且小明是不会用连环炸弹的,因为他觉得这样太浪费,现在就要你来完成简单的提示功能,我们的提示功能简单到只要你输出有没有可能出牌,如果有可能出牌,输出“yes”,否则输出“no”。

输入:

有多组case,数据的第一行输入一个正整数n(2<n<100)表示case数,下面每个case两行,第一行代表对手出的牌(牌数不超过8张),第二行代表小明手上的牌,两行都是有字母“F(大王)、f(小王)、 2 、 A 、 K 、 Q 、 J 、 T(10) 、 9 、 8 、 7 、 6 、 5 、 4 、 3”组成,保证不出现别的字母,而且保证对手出的牌是合法的牌型,并且符合所有的牌是从两幅标准的扑克中抽取。

输出:

有多组case,数据的第一行输入一个正整数n(2<n<100)表示case数,下面每个case两行,第一行代表对手出的牌(牌数不超过8张),第二行代表小明手上的牌,两行都是有字母“F(大王)、f(小王)、 2 、 A 、 K 、 Q 、 J 、 T(10) 、 9 、 8 、 7 、 6 、 5 、 4 、 3”组成,保证不出现别的字母,而且保证对手出的牌是合法的牌型,并且符合所有的牌是从两幅标准的扑克中抽取。

样例输入:

2
34567
456789
333
4444

样例输出:

yes
yes


  1. 给你一组数据吧:29 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1000。此时的数据量还是很小的,耗时却不短。这种方法确实可以,当然或许还有其他的优化方案,但是优化只能针对某些数据,不太可能在所有情况下都能在可接受的时间内求解出答案。