小红最近迷上了纸牌。纸牌有黑桃(Spade)、红桃(Heart)、方块(Diamond)、梅花(Club)四种花色,并且每张纸牌上面写了一个正整数。小红拿到了许多牌,准备玩以下游戏:
为了简化,本题仅计算同花顺这一牌型:即取出的5张牌构成同花顺,则可以获得1分。其他牌型均不得分。
所谓同花顺,即五张牌花色相同,且排序后满足
小红想知道,经过若干次操作后,自己最多可以得到多少分?
请注意,同一个牌型可能出现多次!
第一行输入一个正整数,代表牌堆中牌的种类(如果两张牌的花色或数值不同,则认为种类不同)。
接下来的行,每行输入两个正整数:
和
和一个字符
,分别代表每种牌的大小、数量以及花色。
∈{'S','H','D','C'},代表扑克牌的四种花色:黑桃(Spade)、红桃(Heart)、方块(Diamond)、梅花(Club)。
保证每个种类的牌在输入中只出现了一次。
一个整数,代表小红可以最多获得的分数。
6 1 1 S 2 2 S 3 2 S 4 2 S 5 2 S 1 10 H
1
可以取到一个同花顺:。虽然有10个红桃1,但无法和其他牌凑成同花顺
6 1 1 H 2 2 H 3 2 H 4 2 H 5 2 H 6 10 H
2
可以取两次:和
。
def main():
n = int(input())
poker = {
"S": {},
"H": {},
"D": {},
"C": {},
}
for i in range(n):
x, num, color = input().split(" ")
poker[color][int(x)] = int(num)
total = 0
for color in "SHDC":
ans = 0
grade = 0
nums = poker[color]
# 以数字 k 开头的顺子
keys = list(nums.keys())
keys = sorted(keys)
for k in keys:
cur = [nums[k]]
# 是否都存在
for i in range(1, 5):
if (k + i) in nums and nums[k + i] > 0:
cur.append(nums[k + i])
else:
break
# 都存在就算分
if len(cur) == 5:
grade = min(cur)
# 拿走牌
for i in range(5):
if (k + i) in nums:
nums[k + i] -= grade
ans += grade
total += ans
print(total)