方块游戏
问题描述
农夫约翰试图通过给奶牛一套通常用于学龄前儿童的 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
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
string a[N], b[N];
int n;
int res[26] = {0};
int main()
{
cin >> n;
for(int i = 0; i < n ; i ++)
{
cin >> a[i] >> b[i];
}
for(int i = 0; i < n; i++)
{
int x[26] = {0}, y[26] = {0};
for(auto c : a[i]) x[c - 'a'] ++;
for(auto c : b[i]) y[c - 'a'] ++;
for(int j = 0; j < 26; j++)
{
res[j] += max(x[j], y[j]);
}
}
for(int i = 0; i < 26; i++)
{
cout << res[i] << "\n";
}
return 0;
}