Guest User

TaskC

a guest
Sep 18th, 2016
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.80 KB | None | 0 0
  1.     static class Solver
  2.     {
  3.         int t, n;
  4.         Map<String, String[]> functions;
  5.         Set<String> vars, found;
  6.         InputReader in;
  7.         OutputWriter out;
  8.  
  9.         void solve()
  10.         {
  11.             t = in.nextInt();
  12.  
  13.             for (int test = 1; test <= t; test++)
  14.             {
  15.                 n = in.nextInt();
  16.                 functions = new HashMap<>(2 * n);
  17.                 vars = new HashSet<>();
  18.                 found = new HashSet<>();
  19.  
  20.                 for (int i = 0; i < n; i++)
  21.                 {
  22.                     String[] tokens = in.nextLine().split("=");
  23.                     String[] params = tokens[1].substring(tokens[1].indexOf("(") + 1, tokens[1].indexOf(")")).split
  24.                             (",");
  25.  
  26.                     if (params.length == 1 && params[0].length() == 0)
  27.                         found.add(tokens[0]);
  28.                     else
  29.                     {
  30.                         vars.add(tokens[0]);
  31.                         functions.put(tokens[0], params);
  32.                     }
  33.                 }
  34.  
  35.                 boolean ans = true;
  36.  
  37.                 while (vars.size() > 0)
  38.                 {
  39.                     boolean check = false;
  40.                     Iterator<String> iterator = vars.iterator();
  41.                     List<String> remove = new ArrayList<>();
  42.  
  43.                     while (iterator.hasNext())
  44.                     {
  45.                         String curr = iterator.next();
  46.  
  47.                         if (exist(functions.get(curr)))
  48.                         {
  49.                             remove.add(curr);
  50.                             functions.remove(curr);
  51.                             found.add(curr);
  52.                             check = true;
  53.                         }
  54.                     }
  55.  
  56.                     for (int i = 0; i < remove.size(); i++)
  57.                         vars.remove(remove.get(i));
  58.  
  59.                     if (!check)
  60.                     {
  61.                         ans = false;
  62.  
  63.                         break;
  64.                     }
  65.                 }
  66.  
  67.                 if (ans)
  68.                     out.println("Case #" + test + ": " + "GOOD");
  69.                 else
  70.                     out.println("Case #" + test + ": " + "BAD");
  71.  
  72.             }
  73.         }
  74.  
  75.         boolean exist(String[] vars)
  76.         {
  77.             int len = vars.length;
  78.  
  79.             for (int i = 0; i < len; i++)
  80.                 if (!found.contains(vars[i]))
  81.                     return false;
  82.  
  83.             return true;
  84.         }
  85.  
  86.         public Solver(InputReader in, OutputWriter out)
  87.         {
  88.             this.in = in;
  89.             this.out = out;
  90.         }
  91.  
  92.     }
Add Comment
Please, Sign In to add comment