import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Comparator; import java.util.PriorityQueue; public class sze { static PriorityQueue<X> queue; static int[] slots = new int[1000*1000 + 1]; static class X implements Comparable<X> { int l, p, pmax; public X(int l, int p, int pmax) { this.l = l; this.p = p; this.pmax = pmax; } public String toString() { return l+","+p+","+pmax; } public boolean before(X x) { if (l < x.l) return true; if (l > x.l) return false; return pmax-p < x.pmax - x.p; } public static int compare(X x, X xx) { if (x.before(xx)) return -1; if (xx.before(x)) return 1; return 0; } @Override public int compareTo(X x) { return compare(this, x); } } static void printQueue() { PriorityQueue<X> copy = new PriorityQueue<X>(queue); while (! copy.isEmpty()) { X x = copy.poll(); System.out.print(x+" "); } System.out.println(); } static void job() { while (! queue.isEmpty()) { // printQueue(); X x = queue.poll(); int actualSlot = x.l; if (slots[actualSlot] > 0) { slots[actualSlot]--; } else { x.p++; if (x.p > x.pmax) { System.out.println("NIE"); return; } } x.l++; if (x.l <= x.p) { queue.add(x); } } System.out.println("TAK"); } public static void main(String[] args) throws Exception { io(); job(); } public static void io() { int[] nm = IO.getInts(); int zadan = nm[0]; int procesorow = nm[1]; for (int i = 0; i<slots.length; i++) { slots[i] = procesorow; } queue = new PriorityQueue<X>(zadan, new Comparator<X>(){ public int compare(X x, X xx) { return X.compare(x, xx); } }); for (int i = 0; i<zadan; i++) { int t[] = IO.getInts(); int p=t[0], k=t[1], c=t[2]; queue.add(new X(p, p+c-1, k-1)); } } public static class IO { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); public static int[] getInts() { try { String[] ss = br.readLine().split(" "); int[] ret = new int[ss.length]; for (int i = 0; i<ss.length; i++) { ret[i] = Integer.valueOf(ss[i]); } return ret; } catch (Exception e) { throw new RuntimeException(e); } } public static int getInt() { return getInts()[0]; } } }
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 | import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Comparator; import java.util.PriorityQueue; public class sze { static PriorityQueue<X> queue; static int[] slots = new int[1000*1000 + 1]; static class X implements Comparable<X> { int l, p, pmax; public X(int l, int p, int pmax) { this.l = l; this.p = p; this.pmax = pmax; } public String toString() { return l+","+p+","+pmax; } public boolean before(X x) { if (l < x.l) return true; if (l > x.l) return false; return pmax-p < x.pmax - x.p; } public static int compare(X x, X xx) { if (x.before(xx)) return -1; if (xx.before(x)) return 1; return 0; } @Override public int compareTo(X x) { return compare(this, x); } } static void printQueue() { PriorityQueue<X> copy = new PriorityQueue<X>(queue); while (! copy.isEmpty()) { X x = copy.poll(); System.out.print(x+" "); } System.out.println(); } static void job() { while (! queue.isEmpty()) { // printQueue(); X x = queue.poll(); int actualSlot = x.l; if (slots[actualSlot] > 0) { slots[actualSlot]--; } else { x.p++; if (x.p > x.pmax) { System.out.println("NIE"); return; } } x.l++; if (x.l <= x.p) { queue.add(x); } } System.out.println("TAK"); } public static void main(String[] args) throws Exception { io(); job(); } public static void io() { int[] nm = IO.getInts(); int zadan = nm[0]; int procesorow = nm[1]; for (int i = 0; i<slots.length; i++) { slots[i] = procesorow; } queue = new PriorityQueue<X>(zadan, new Comparator<X>(){ public int compare(X x, X xx) { return X.compare(x, xx); } }); for (int i = 0; i<zadan; i++) { int t[] = IO.getInts(); int p=t[0], k=t[1], c=t[2]; queue.add(new X(p, p+c-1, k-1)); } } public static class IO { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); public static int[] getInts() { try { String[] ss = br.readLine().split(" "); int[] ret = new int[ss.length]; for (int i = 0; i<ss.length; i++) { ret[i] = Integer.valueOf(ss[i]); } return ret; } catch (Exception e) { throw new RuntimeException(e); } } public static int getInt() { return getInts()[0]; } } } |