1813 方块游戏(枚举)

1. 问题描述:

农夫约翰试图通过给奶牛一套通常用于学龄前儿童的 N 个拼写板来教他的奶牛阅读。每个拼写板的每一侧都有一个单词和一个图画。例如,一侧可能有单词 cat 和一只小猫,另一侧可能有单词 dog 和一只小狗。因此,当所有拼写板放置到地面上时,会显示一组 N 个单词。通过翻转其中一部分板子,就可以得到另一组 N 个单词。为了帮助奶牛练习单词拼写,约翰想要制作一些木块,在每个木块上都印上一个字母,使得奶牛可以使用这些木块拼出看到的单词。为了使得无论哪一组 N 个单词朝上显示,奶牛都能将其全部拼出,就需要印有各种字母的木块都足够的多。例如,如果 N=3 且单词 box,cat,car 朝上显示,则奶牛至少需要一个 b 块,一个 o 块,一个 x 块,两个 c 块,两个 a 块,一个 t 块和一个 r 块。请帮助约翰确定,印有每种字母的木块至少需要提供多少块,才能使得不管每个板子的哪一侧朝上显示,奶牛都可以拼出所有 N 个可见的单词。

输入格式

第一行包含整数 N。接下来 N 行,每行包含两个单词,这两个单词分别位于一块木板的两侧,每个单词都是长度不超过 10 的小写字母构成的字符串。

输出格式

共 26 行。第一行输出印有字母 a 的木块所需的块数。第二行输出印有字母 b 的木块所需的块数,以此类推。

数据范围

1 ≤ N ≤ 100

输入样例:

3
fox box
dog cat
car bus

输出样例:

2
2
2
1
0
1
1
0
0
0
0
0
0
0
2
0
0
1
1
1
1
0
0
1
0
0
样例解释
在此样例中,共有 N=3 块拼写板,共有 8 种单词组合:

fox dog car
fox dog bus
fox cat car
fox cat bus
box dog car
box dog bus
box cat car
box cat bus
来源:https://www.acwing.com/problem/content/description/1815/

2. 思路分析:

分析题目可以知道对于每一组拼接板内部与拼写板之间都是独立的所以我们可以求解出每一组中对应字母出现次数的最大值然后将其累加起来即可。这样不管哪一组都可以完成拼写板的单词。

3. 代码如下:

import collections


class Solution:
    def process(self):
        n = int(input())
        res = [0] * 26
        for i in range(n):
            s = input().split()
            x, y = [0] * 26, [0] * 26
            for c in s[0]:
                # ord函数计算出当前字符c的acsii码
                x[ord(c) - ord("a")] += 1
            for c in s[1]:
                y[ord(c) - ord("a")] += 1
            for j in range(26):
                res[j] += max(x[j], y[j])
        for i in range(26):
            print(res[i])


if __name__ == '__main__':
    Solution().process()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值