Благоприятный финал

Вы можете найти вопрос здесь: Благоприятный финал. Вопрос в том, чтобы найти маршруты со страницы 1, которые заканчиваются благоприятным финалом. Например: для книги с 4 разделами. Если ввод такой, как показано ниже:

1 3 11 13
3 favourably
11 catastrophically
13 favourably

Результат будет: 2

Для книги с 10 разделами. Если ввод такой, как показано ниже:

1 21 6 17
3 favourably
6 catastrophically
8 favourably
12 favourably
15 6 33 12
17 15 8 33
21 329 15
29 favourably
33 catastrophically

Результатом будет: 5.
Поскольку мы переходим на страницу 21 с 1[21,6,17], который имеет [3,29,15]
где 3 и 29 выгодно ведут (2), но с 15 мы имеем [6,33,12]где только 12 благоприятно, то
есть теперь у нас есть +1, что дает(3). Теперь переходим к 6 из 1[6,17] что катастрофично, поэтому +0 дает (3).
Осталось страница 17 из 1[17] который имеет [15, 8, 33]. 15 при вычислении имеет 1, поэтому(3+1) и путь 8 имеет один благоприятный, поэтому (3+1+1)=5.

При такой логике решение на Python, которое проходит все тестовые примеры, выглядит следующим образом:

num_tests = int(input())
for _ in range(num_tests):
    num_secs = int(input())
    ends = set()
    bads = set()
    p = {}
    for _ in range(num_secs):
        parts = input().split()
        n = int(parts[0])
        if parts[1][0] == 'f':
            ends.add(n)
            p[n] = []
        elif parts[1][0] == 'c':
            bads.add(n)
            p[n] = []
        else:
            p[n] = map(int, parts[1:])

    mem = {}
    def search(index):
        if index in mem:
            return mem[index]
        if index in ends:
            return 1
        ans = 0
        for q in p[index]:
            ans += search(q)
        mem[index] = ans
        return ans

    print(search(1))

Однако реализация java проходит только один тестовый пример, и нет способа узнать, для какого тестового примера он не работает, но он проходит только один тестовый пример. Логика одинакова в обоих случаях. Мне не хватает правила в реализации Java.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;

public class FavourableEnding {


    public static int checkDist(HashMap<String,Integer> mem, HashSet<String> set,HashMap<String,List<String>> m,String key) {

        if(mem.get(key)!=null) {
            return mem.get(key);
        }

        if(set.contains(key))
            return 1;

        int ans =0;

        List<String> data = m.get(key);
        for(int i=0;i<data.size();i++) {
            ans+=checkDist(mem,set,m,data.get(i));  
        }

        mem.put(key,ans);
        return ans;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(new BufferedReader(new InputStreamReader(System.in)));


        while(sc.hasNext()) {
            int numTests = sc.nextInt();
             HashMap<String,Integer> mem = new HashMap<>();
             HashSet<String> set = new HashSet<>();

             HashMap<String,List<String>> m = new HashMap<>();
            while(numTests-->0) {

                int numSecs = sc.nextInt();
                sc.nextLine();
                while(numSecs-->0) {
                    String[] data = sc.nextLine().split(" ");
                    if(data[1].equals("favourably")) {
                        set.add(data[0]);
                        m.put(data[0],new ArrayList<>());
                    }else if(data[1].equals("catastrophically")) {
                        m.put(data[0],new ArrayList<>());
                    }else {
                        List<String> lst = new ArrayList<>();
                        lst.add(data[1]);
                        lst.add(data[2]);
                        lst.add(data[3]);
                        m.put(data[0], lst);
                    }
                }

                List<String> getDist = m.get("1");
                int ans =0;
                for(int i=0;i<getDist.size();i++) {
                    ans+=checkDist(mem,set,m,getDist.get(i));
                }
                System.out.println(ans);
            }

        }
    }

}

0 ответов

Другие вопросы по тегам