import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.PriorityQueue;
/**
* @author khelman
*/
public class boh {
public static void main(String... args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String s = reader.readLine();
String[] elems = s.split(" ");
int n = Integer.parseInt(elems[0]);
long z = Integer.parseInt(elems[1]);
int[] ret = new int[n];
final long[] ascA = new long[n + 1];
final long[] ascD = new long[n + 1];
int retCount = 0;
PriorityQueue<Integer> ascQueue = new PriorityQueue<Integer>(n, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Long.compare(ascD[o1], ascD[o2]);
}
});
PriorityQueue<Integer> dscQueue = new PriorityQueue<Integer>(n, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Long.compare(ascA[o1] - ascD[o1], ascA[o2] - ascD[o2]);
}
});
for (int i = 1; i <= n; i++) {
s = reader.readLine();
elems = s.split(" ");
long d = Integer.parseInt(elems[0]);
long a = Integer.parseInt(elems[1]);
ascA[i] = a;
ascD[i] = d;
if (a >= d) {
if (d <= z) {
z = z - d + a;
ret[retCount++] = i;
while (!ascQueue.isEmpty() && ascD[ascQueue.peek()] <= z) {
int min = ascQueue.poll();
z = z - ascD[min] + ascA[min];
ret[retCount++] = min;
}
} else {
ascQueue.add(i);
}
} else {
dscQueue.add(i);
}
}
if (!ascQueue.isEmpty()) {
System.out.println("NIE");
return;
}
while (!dscQueue.isEmpty() && ascD[dscQueue.peek()] <= z) {
int min = dscQueue.poll();
z = z - ascD[min] + ascA[min];
ret[retCount++] = min;
}
if (!dscQueue.isEmpty()) {
System.out.println("NIE");
return;
}
System.out.println("TAK");
for (int r : ret) {
System.out.print(r);
System.out.print(" ");
}
System.out.println();
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Comparator; import java.util.PriorityQueue; /** * @author khelman */ public class boh { public static void main(String... args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String s = reader.readLine(); String[] elems = s.split(" "); int n = Integer.parseInt(elems[0]); long z = Integer.parseInt(elems[1]); int[] ret = new int[n]; final long[] ascA = new long[n + 1]; final long[] ascD = new long[n + 1]; int retCount = 0; PriorityQueue<Integer> ascQueue = new PriorityQueue<Integer>(n, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return Long.compare(ascD[o1], ascD[o2]); } }); PriorityQueue<Integer> dscQueue = new PriorityQueue<Integer>(n, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return Long.compare(ascA[o1] - ascD[o1], ascA[o2] - ascD[o2]); } }); for (int i = 1; i <= n; i++) { s = reader.readLine(); elems = s.split(" "); long d = Integer.parseInt(elems[0]); long a = Integer.parseInt(elems[1]); ascA[i] = a; ascD[i] = d; if (a >= d) { if (d <= z) { z = z - d + a; ret[retCount++] = i; while (!ascQueue.isEmpty() && ascD[ascQueue.peek()] <= z) { int min = ascQueue.poll(); z = z - ascD[min] + ascA[min]; ret[retCount++] = min; } } else { ascQueue.add(i); } } else { dscQueue.add(i); } } if (!ascQueue.isEmpty()) { System.out.println("NIE"); return; } while (!dscQueue.isEmpty() && ascD[dscQueue.peek()] <= z) { int min = dscQueue.poll(); z = z - ascD[min] + ascA[min]; ret[retCount++] = min; } if (!dscQueue.isEmpty()) { System.out.println("NIE"); return; } System.out.println("TAK"); for (int r : ret) { System.out.print(r); System.out.print(" "); } System.out.println(); } } |
English