方块游戏


题目

链接:1813. 方块游戏 - AcWing题库

农夫约翰试图通过给奶牛一套通常用于学龄前儿童的 N 个拼写板来教他的奶牛阅读。

每个拼写板的每一侧都有一个单词和一个图画。

例如,一侧可能有单词 cat 和一只小猫,另一侧可能有单词 dog 和一只小狗。

因此,当所有拼写板放置到地面上时,会显示一组 N 个单词。

通过翻转其中一部分板子,就可以得到另一组 N 个单词。

为了帮助奶牛练习单词拼写,约翰想要制作一些木块,在每个木块上都印上一个字母,使得奶牛可以使用这些木块拼出看到的单词。

为了使得无论哪一组 N 个单词朝上显示,奶牛都能将其全部拼出,就需要印有各种字母的木块都足够的多。

例如,如果 N=3 且单词 box,cat,car 朝上显示,则奶牛至少需要一个 b 块,一个 o 块,一个 x 块,两个 c 块,两个 a 块,一个 t 块和一个 r 块。

请帮助约翰确定,印有每种字母的木块至少需要提供多少块,才能使得不管每个板子的哪一侧朝上显示,奶牛都可以拼出所有 N 个可见的单词。

代码

import java.util.*;


public class Main {
    static int N = 100010;
    static int n;
    static int[] ans = new int[26];
    static int[] sum = new int[26];
    static int[] sum1 = new int[26];
    public static void main(String[] args) {
        Scanner inScanner = new Scanner(System.in);
        n = inScanner.nextInt();
        String a;
        for(int i = 1; i <= n; i ++)
        {
            a = inScanner.next();
            for(int j = 0; j < a.length(); j ++)
                sum[a.charAt(j) - 'a'] ++;
            a = inScanner.next();
            for(int j = 0; j < a.length(); j ++)
                sum1[a.charAt(j) - 'a'] ++;
            for(int j = 0; j < 26; j ++)
            {
                ans[j] += Math.max(sum[j], sum1[j]);
                sum[j] = sum1[j] = 0;
            }
        }
        inScanner.close();
        for(int i = 0; i < 26; i ++)
            System.out.printf("%d\n", ans[i]);
    }
}

文章作者: 姜小白
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 姜小白 !
评论
  目录