农夫约翰试图通过给奶牛一套通常用于学龄前儿童的 NN 个拼写板来教他的奶牛阅读。
每个拼写板的每一侧都有一个单词和一个图画。
例如,一侧可能有单词 cat 和一只小猫,另一侧可能有单词 dog 和一只小狗。
因此,当所有拼写板放置到地面上时,会显示一组 NN 个单词。
通过翻转其中一部分板子,就可以得到另一组 NN 个单词。
为了帮助奶牛练习单词拼写,约翰想要制作一些木块,在每个木块上都印上一个字母,使得奶牛可以使用这些木块拼出看到的单词。
为了使得无论哪一组 NN 个单词朝上显示,奶牛都能将其全部拼出,就需要印有各种字母的木块都足够的多。
例如,如果 N=3N=3 且单词 box,cat,car 朝上显示,则奶牛至少需要一个 b 块,一个 o 块,一个 x 块,两个 c 块,两个 a 块,一个 t 块和一个 r 块。
请帮助约翰确定,印有每种字母的木块至少需要提供多少块,才能使得不管每个板子的哪一侧朝上显示,奶牛都可以拼出所有 NN 个可见的单词。
输入格式
第一行包含整数 NN。
接下来 NN 行,每行包含两个单词,这两个单词分别位于一块木板的两侧,每个单词都是长度不超过 1010 的小写字母构成的字符串。
输出格式
共 2626 行。
第一行输出印有字母 aa 的木块所需的块数。
第二行输出印有字母 bb 的木块所需的块数,以此类推。
数据范围
输入样例:
输出样例:
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=3N=3 块拼写板,共有 88 种单词组合:
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 <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
string a[N],b[N];
int n;
int main() {
cin >> n;
for (int i = 0; i < n; ++i) cin >> a[i] >> b[i];
int res[26] = {0};
for (int i = 0; i < n; ++i) {
int cnt1[26] = {0}, cnt2[26] = {0};
for (auto c : a[i]) cnt1[c-'a'] ++;
for (auto c : b[i]) cnt2[c-'a'] ++;
for (int j = 0; j < 26; ++j)
res[j] += max(cnt1[j],cnt2[j]);
}
for (int i = 0; i < 26; ++i) cout << res[i] << endl;
return 0;
}