import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import static java.lang.Integer.valueOf;
public class boh {
private static class Monster {
int d;
int a;
int number;
private Monster(int number, int d, int a) {
this.number = number;
this.d = d;
this.a = a;
}
@Override
public String toString() {
return "Monster{" +
"d=" + d +
", a=" + a +
", number=" + number +
'}';
}
}
private static class PositiveMonsterComparator implements Comparator<Monster> {
@Override
public int compare(Monster o1, Monster o2) {
return Integer.compare(o1.d, o2.d);
}
}
private static class NegativeMonsterComparator implements Comparator<Monster> {
@Override
public int compare(Monster o1, Monster o2) {
return Integer.compare(o2.a, o1.a);
}
}
public static void main(String[] args) throws IOException {
List<Monster> positiveMonsters = new ArrayList<Monster>();
List<Monster> negativeMonsters = new ArrayList<Monster>();
List<Monster> allMonsters = new ArrayList<Monster>();
long z = readMonsters(positiveMonsters, negativeMonsters);
Collections.sort(positiveMonsters, new PositiveMonsterComparator());
Collections.sort(negativeMonsters, new NegativeMonsterComparator());
allMonsters.addAll(positiveMonsters);
allMonsters.addAll(negativeMonsters);
StringBuilder result = new StringBuilder();
for (Monster m : allMonsters) {
if (z <= m.d) {
System.out.println("NIE");
return;
}
if (result.length() != 0) {
result.append(" ");
}
result.append(m.number);
z = z - m.d + m.a;
}
if (z > 0) {
System.out.println("TAK");
System.out.println(result.toString());
} else {
System.out.println("NIE");
}
}
private static int readMonsters(List<Monster> positiveMonsters, List<Monster> negativeMonsters) throws IOException {
InputStream input = System.in;
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String[] nzLine = reader.readLine().split(" ");
int n = valueOf(nzLine[0]);
int z = valueOf(nzLine[1]);
for (int i = 0; i < n; i++) {
String[] daLine = reader.readLine().split(" ");
int d = valueOf(daLine[0]); // damage
int a = valueOf(daLine[1]); // health
Monster monster = new Monster(i+1, d, a);
if (a > d) {
positiveMonsters.add(monster);
} else {
negativeMonsters.add(monster);
}
}
return z;
}
}
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 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import static java.lang.Integer.valueOf; public class boh { private static class Monster { int d; int a; int number; private Monster(int number, int d, int a) { this.number = number; this.d = d; this.a = a; } @Override public String toString() { return "Monster{" + "d=" + d + ", a=" + a + ", number=" + number + '}'; } } private static class PositiveMonsterComparator implements Comparator<Monster> { @Override public int compare(Monster o1, Monster o2) { return Integer.compare(o1.d, o2.d); } } private static class NegativeMonsterComparator implements Comparator<Monster> { @Override public int compare(Monster o1, Monster o2) { return Integer.compare(o2.a, o1.a); } } public static void main(String[] args) throws IOException { List<Monster> positiveMonsters = new ArrayList<Monster>(); List<Monster> negativeMonsters = new ArrayList<Monster>(); List<Monster> allMonsters = new ArrayList<Monster>(); long z = readMonsters(positiveMonsters, negativeMonsters); Collections.sort(positiveMonsters, new PositiveMonsterComparator()); Collections.sort(negativeMonsters, new NegativeMonsterComparator()); allMonsters.addAll(positiveMonsters); allMonsters.addAll(negativeMonsters); StringBuilder result = new StringBuilder(); for (Monster m : allMonsters) { if (z <= m.d) { System.out.println("NIE"); return; } if (result.length() != 0) { result.append(" "); } result.append(m.number); z = z - m.d + m.a; } if (z > 0) { System.out.println("TAK"); System.out.println(result.toString()); } else { System.out.println("NIE"); } } private static int readMonsters(List<Monster> positiveMonsters, List<Monster> negativeMonsters) throws IOException { InputStream input = System.in; BufferedReader reader = new BufferedReader(new InputStreamReader(input)); String[] nzLine = reader.readLine().split(" "); int n = valueOf(nzLine[0]); int z = valueOf(nzLine[1]); for (int i = 0; i < n; i++) { String[] daLine = reader.readLine().split(" "); int d = valueOf(daLine[0]); // damage int a = valueOf(daLine[1]); // health Monster monster = new Monster(i+1, d, a); if (a > d) { positiveMonsters.add(monster); } else { negativeMonsters.add(monster); } } return z; } } |
English