Arrange.java 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import java.util.Arrays;
  2. import java.util.Comparator;
  3. import java.util.Scanner;
  4. public class Arrange {
  5. static class Pair {
  6. int time;
  7. int rank;
  8. Pair(int time, int rank) {
  9. this.time = time;
  10. this.rank = rank;
  11. }
  12. }
  13. public static void main(String[] args) { // 200*xi + 3*yi
  14. Scanner scanner = new Scanner(System.in);
  15. int n = scanner.nextInt(), m = scanner.nextInt();
  16. Pair[] mach = new Pair[n];
  17. Pair[] task = new Pair[m];
  18. for (int i = 0; i < n; i++) {
  19. mach[i] = new Pair(scanner.nextInt(), scanner.nextInt());
  20. }
  21. for (int i = 0; i < m; i++) {
  22. task[i] = new Pair(scanner.nextInt(), scanner.nextInt());
  23. }
  24. Comparator cmp = new Comparator<Pair>() {
  25. @Override
  26. public int compare(Pair p1, Pair p2) {
  27. if (p1.time != p2.time)
  28. return p2.time - p1.time;
  29. return p2.rank - p1.rank;
  30. }
  31. };
  32. Arrays.sort(task, cmp);
  33. Arrays.sort(mach, cmp);
  34. int cnt = 0, gain = 0, idx = 0;
  35. int[] level = new int[101];
  36. for (Pair t : task) {
  37. while (idx < n && t.time <= mach[idx].time) {
  38. level[mach[idx].rank]++;
  39. idx++;
  40. }
  41. for (int i = t.rank; i < 101; i++) {
  42. if (0 < level[i]) {
  43. level[i]--;
  44. cnt++;
  45. gain += 200 * t.time + 3 * t.rank;
  46. break;
  47. }
  48. }
  49. }
  50. System.out.printf("%d %d\n", cnt, gain);
  51. scanner.close();
  52. }
  53. }