Untitled

 avatar
unknown
plain_text
2 years ago
2.4 kB
4
Indexable
public class Solution {
    public static List<Long> substitutions(List<String> words, List<String> phrases) {
        Map<String, Integer> wordCount = new HashMap<>();
        Map<String, Integer> anagramCount = new HashMap<>();
        List<Long> result = new ArrayList<>();

        for (String word : words) {
            char[] chars = word.toCharArray();
            java.util.Arrays.sort(chars);
            String sortedWord = new String(chars);
            wordCount.put(word, wordCount.getOrDefault(word, 0) + 1);
            anagramCount.put(sortedWord, anagramCount.getOrDefault(sortedWord, 0) + 1);
        }

        for (String phrase : phrases) {
            String[] wordsInPhrase = phrase.split(" ");
            long total = 1;
            for (String wordInPhrase : wordsInPhrase) {
                char[] chars = wordInPhrase.toCharArray();
                java.util.Arrays.sort(chars);
                String sortedWord = new String(chars);
                total *= anagramCount.get(sortedWord) / wordCount.get(wordInPhrase);
            }
            result.add(total);
        }

        return result;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

        int wordsCount = Integer.parseInt(bufferedReader.readLine().trim());

        List<String> words = IntStream.range(0, wordsCount).mapToObj(i -> {
            try {
                return bufferedReader.readLine();
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
        })
            .collect(toList());

        int phrasesCount = Integer.parseInt(bufferedReader.readLine().trim());

        List<String> phrases = IntStream.range(0, phrasesCount).mapToObj(i -> {
            try {
                return bufferedReader.readLine();
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
        })
            .collect(toList());

        List<Long> result = substitutions(words, phrases);

        bufferedWriter.write(
            result.stream()
                .map(Object::toString)
                .collect(joining("\n"))
            + "\n"
        );
Editor is loading...