农夫约翰试图通过给奶牛一套通常用于学龄前儿童的 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 的木块所需的块数,以此类推。

数据范围

1≤N≤1001≤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=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
image.png


  1. #include <iostream>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. const int N = 110;
  6. string a[N],b[N];
  7. int n;
  8. int main() {
  9. cin >> n;
  10. for (int i = 0; i < n; ++i) cin >> a[i] >> b[i];
  11. int res[26] = {0};
  12. for (int i = 0; i < n; ++i) {
  13. int cnt1[26] = {0}, cnt2[26] = {0};
  14. for (auto c : a[i]) cnt1[c-'a'] ++;
  15. for (auto c : b[i]) cnt2[c-'a'] ++;
  16. for (int j = 0; j < 26; ++j)
  17. res[j] += max(cnt1[j],cnt2[j]);
  18. }
  19. for (int i = 0; i < 26; ++i) cout << res[i] << endl;
  20. return 0;
  21. }