1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- import java.util.Arrays;
- import java.util.Comparator;
- import java.util.Scanner;
- public class Arrange {
- static class Pair {
- int time;
- int rank;
- Pair(int time, int rank) {
- this.time = time;
- this.rank = rank;
- }
- }
- public static void main(String[] args) { // 200*xi + 3*yi
- Scanner scanner = new Scanner(System.in);
- int n = scanner.nextInt(), m = scanner.nextInt();
- Pair[] mach = new Pair[n];
- Pair[] task = new Pair[m];
- for (int i = 0; i < n; i++) {
- mach[i] = new Pair(scanner.nextInt(), scanner.nextInt());
- }
- for (int i = 0; i < m; i++) {
- task[i] = new Pair(scanner.nextInt(), scanner.nextInt());
- }
- Comparator cmp = new Comparator<Pair>() {
- @Override
- public int compare(Pair p1, Pair p2) {
- if (p1.time != p2.time)
- return p2.time - p1.time;
- return p2.rank - p1.rank;
- }
- };
- Arrays.sort(task, cmp);
- Arrays.sort(mach, cmp);
- int cnt = 0, gain = 0, idx = 0;
- int[] level = new int[101];
- for (Pair t : task) {
- while (idx < n && t.time <= mach[idx].time) {
- level[mach[idx].rank]++;
- idx++;
- }
- for (int i = t.rank; i < 101; i++) {
- if (0 < level[i]) {
- level[i]--;
- cnt++;
- gain += 200 * t.time + 3 * t.rank;
- break;
- }
- }
- }
- System.out.printf("%d %d\n", cnt, gain);
- scanner.close();
- }
- }
|