import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class boh {
/**
* @param args
* @throws IOException
* @throws NumberFormatException
*/
public static void main(String[] args) throws NumberFormatException,
IOException {
BufferedReader bi = new BufferedReader(new InputStreamReader(System.in));
String line = bi.readLine();
String[] strs = line.split("\\s");
int n = Integer.valueOf(strs[0]);
int z = Integer.valueOf(strs[1]);
Battle[] battles = new Battle[n];
for (int i = 0; i < n; i++) {
line = bi.readLine();
strs = line.split("\\s");
int d = Integer.valueOf(strs[0]);
int h = Integer.valueOf(strs[1]);
battles[i] = new Battle(d, h, i + 1);
}
Arrays.sort(battles);
boolean result = true;
for (int i = 0; i < n && result; i++) {
if (z <= battles[i].getDamage()) {
result = false;
} else {
z += battles[i].getDiff();
}
}
if (!result) {
System.out.println("NIE");
} else {
System.out.println("TAK");
System.out.print(battles[0].getIndex());
for (int i = 1; i < n; i++) {
System.out.print(" " + battles[i].getIndex());
}
System.out.println();
}
}
public static class Battle implements Comparable<Battle> {
private final Integer damage;
private final Integer health;
private final Integer diff;
private final Integer index;
public Battle(Integer damage, Integer health, Integer index) {
super();
this.damage = damage;
this.health = health;
this.index = index;
this.diff = health - damage;
}
public Integer getDamage() {
return damage;
}
public int getHealth() {
return health;
}
public Integer getDiff() {
return diff;
}
@Override
public int compareTo(Battle o) {
Integer signumDiff = Integer.signum(getDiff());
Integer otherSignumDiff = Integer.signum(o.getDiff());
Integer signumDiff2 = signumDiff;
int cmp = -signumDiff2.compareTo(otherSignumDiff);
if (cmp == 0) {
if (signumDiff >= 0) {
return getDamage().compareTo(o.getDamage());
} else {
return -getDamage().compareTo(o.getDamage());
}
} else {
return cmp;
}
}
public Integer getIndex() {
return index;
}
// @Override
// public String toString() {
// return "[d=" + damage + ", diff=" + diff + "]";
// }
}
}
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 94 95 96 97 98 99 100 101 102 103 104 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class boh { /** * @param args * @throws IOException * @throws NumberFormatException */ public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader bi = new BufferedReader(new InputStreamReader(System.in)); String line = bi.readLine(); String[] strs = line.split("\\s"); int n = Integer.valueOf(strs[0]); int z = Integer.valueOf(strs[1]); Battle[] battles = new Battle[n]; for (int i = 0; i < n; i++) { line = bi.readLine(); strs = line.split("\\s"); int d = Integer.valueOf(strs[0]); int h = Integer.valueOf(strs[1]); battles[i] = new Battle(d, h, i + 1); } Arrays.sort(battles); boolean result = true; for (int i = 0; i < n && result; i++) { if (z <= battles[i].getDamage()) { result = false; } else { z += battles[i].getDiff(); } } if (!result) { System.out.println("NIE"); } else { System.out.println("TAK"); System.out.print(battles[0].getIndex()); for (int i = 1; i < n; i++) { System.out.print(" " + battles[i].getIndex()); } System.out.println(); } } public static class Battle implements Comparable<Battle> { private final Integer damage; private final Integer health; private final Integer diff; private final Integer index; public Battle(Integer damage, Integer health, Integer index) { super(); this.damage = damage; this.health = health; this.index = index; this.diff = health - damage; } public Integer getDamage() { return damage; } public int getHealth() { return health; } public Integer getDiff() { return diff; } @Override public int compareTo(Battle o) { Integer signumDiff = Integer.signum(getDiff()); Integer otherSignumDiff = Integer.signum(o.getDiff()); Integer signumDiff2 = signumDiff; int cmp = -signumDiff2.compareTo(otherSignumDiff); if (cmp == 0) { if (signumDiff >= 0) { return getDamage().compareTo(o.getDamage()); } else { return -getDamage().compareTo(o.getDamage()); } } else { return cmp; } } public Integer getIndex() { return index; } // @Override // public String toString() { // return "[d=" + damage + ", diff=" + diff + "]"; // } } } |
English