SophiYo

Problem01Ranking

Mar 20th, 2019
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.52 KB | None | 0 0
  1. package O7AssocietiveArrays.MoreExercise;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.util.LinkedHashMap;
  7. import java.util.Map;
  8. import java.util.TreeMap;
  9.  
  10. public class Problem01Ranking {
  11.     public static void main(String[] args) throws IOException {
  12.         BufferedReader reader =
  13.             new BufferedReader(
  14.                 new InputStreamReader(
  15.                     System.in
  16.                 )
  17.             );
  18.  
  19.         LinkedHashMap<String, String> initialInfo = new LinkedHashMap<>();
  20.  
  21.         String input1;
  22.  
  23.         while (!"end of contests".equalsIgnoreCase(input1= reader.readLine())) {
  24.             String[] tokens = input1.split("\\s+:\\s+|:");
  25.             String contest = tokens[0];
  26.             String password = tokens[1];
  27.  
  28.             if (!initialInfo.containsKey(contest)) {
  29.                 initialInfo.put(contest, password);
  30.             }
  31.  
  32.         }
  33.  
  34.         TreeMap<String, LinkedHashMap<String, Integer>> userDependence =
  35.                 new TreeMap<>();
  36.         LinkedHashMap<String, Integer> sumUser = new LinkedHashMap<>();
  37.         String input2;
  38.  
  39.         while (!"end of submissions".equalsIgnoreCase(input2=reader.readLine())) {
  40.             String[] tokens = input2.split("=>");
  41.             String contest = tokens[0];
  42.             String password = tokens[1];
  43.             String user = tokens[2];
  44.             int points = Integer.parseInt(tokens[3]);
  45.  
  46.             if (initialInfo.containsKey(contest)
  47.                     &&
  48.                     initialInfo.get(contest).equals(password)) {
  49.  
  50.                 int subtractPoints = 0;
  51.  
  52.                 if (!userDependence.containsKey(user)){
  53.                     userDependence.put(user, new LinkedHashMap<>());
  54.                     userDependence.get(user).put(contest, points);
  55.                 } else if (userDependence.containsKey(user)
  56.                         && userDependence
  57.                             .get(user)
  58.                             .containsKey(contest)
  59.                                && userDependence
  60.                 .get(user)
  61.                 .get(contest) <= points ) {
  62.  
  63.                     subtractPoints = userDependence.get(user).get(contest);
  64.                     userDependence.get(user).put(contest, points);
  65.  
  66.                 } else if (userDependence.containsKey(user)
  67.                         && userDependence
  68.                         .get(user)
  69.                         .containsKey(contest)
  70.                         && userDependence
  71.                         .get(user)
  72.                         .get(contest) > points ) {
  73.  
  74.                     subtractPoints = points;
  75.  
  76.                 } else if (userDependence.containsKey(user)
  77.                         && !userDependence
  78.                         .get(user)
  79.                         .containsKey(contest)){
  80.  
  81.                     userDependence
  82.                             .get(user)
  83.                             .put(contest, points);
  84.                 }
  85.  
  86.                 if (!sumUser.containsKey(user)) {
  87.                     sumUser.put(user, points);
  88.                 } else {
  89.  
  90.                     sumUser.put(user, sumUser.get(user)  + points - subtractPoints);
  91.  
  92.                 }
  93.             }
  94.  
  95.         }
  96.  
  97.         sumUser
  98.                 .entrySet()
  99.                 .stream()
  100.                 .sorted((e1,e2)->
  101.                         Integer.compare(e2.getValue(), e1.getValue()))
  102.                 .limit(1)
  103.                 .forEach((key)->
  104.                         System.out.println(
  105.                                 String.format(
  106.                                         "Best candidate is %s with total %d points.",
  107.                                         key.getKey()
  108.                                         ,key.getValue()
  109.                                         )));
  110.  
  111.         System.out.println("Ranking: ");
  112.         for (Map.Entry<String, LinkedHashMap<String, Integer>> key : userDependence
  113.                 .entrySet()) {
  114.             System.out.println(key.getKey());
  115.             key
  116.                     .getValue()
  117.                     .entrySet()
  118.                     .stream()
  119.                     .sorted((p1, p2) ->
  120.                             Integer.compare(p2.getValue(), p1.getValue()))
  121.                     .forEach(e ->
  122.                             System.out.println(String.format(
  123.                                     "#  %s -> %d",
  124.                                     e.getKey(),
  125.                                     e.getValue()
  126.                             )));
  127.         }
  128.  
  129.     }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment