#include <stdio.h> #include <algorithm> #define MAX 100011 using namespace std; //---------------------------------- typedef struct ST { int x, y, id; } ST; int Q[MAX]; ST T[MAX], P[MAX]; //---------------------------------- char OrdX(const ST &a, const ST &b) { return ((a.x==b.x)? a.y>b.y : a.x<b.x); } char OrdY(const ST &a, const ST &b) { return ((a.y==b.y)? a.x>b.x : a.y>b.y); } //---------------------------------- void readInt(int *n) { register char c = 0; while (c < 48) c = getc_unlocked(stdin); (*n) = 0; while (c>32) { (*n)=(*n)*10 + (c-48); c=getc_unlocked(stdin); } } //------------------------------------ int main(void) { int i, j, k, n, z, d, a, q; long long sum; char F; readInt(&n); readInt(&z); sum = 1LL*z; q=j=k=0; F=1; for(i=0; i<n; i++) { readInt(&d); readInt(&a); if(d<=a) { P[j].x=d; P[j].y=a; P[j++].id=i; } else { T[k].x=d; T[k].y=a; T[k++].id=i; } } sort(P, P+j, OrdX); for(i=0; i<j; i++) { sum -= P[i].x; if(sum<1) { F=0; break; } sum += P[i].y; Q[q++] = P[i].id; } if(F) { sort(T, T+k, OrdY); for(i=0; i<k; i++) { sum -= T[i].x; if(sum<1) { F=0; break; } sum += T[i].y; Q[q++] = T[i].id; } } if(!F) puts("NIE"); else { puts("TAK"); for (i=0; i<q-1; i++) printf("%d ", Q[i]+1); printf("%d", Q[i]+1); } return 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 | #include <stdio.h> #include <algorithm> #define MAX 100011 using namespace std; //---------------------------------- typedef struct ST { int x, y, id; } ST; int Q[MAX]; ST T[MAX], P[MAX]; //---------------------------------- char OrdX(const ST &a, const ST &b) { return ((a.x==b.x)? a.y>b.y : a.x<b.x); } char OrdY(const ST &a, const ST &b) { return ((a.y==b.y)? a.x>b.x : a.y>b.y); } //---------------------------------- void readInt(int *n) { register char c = 0; while (c < 48) c = getc_unlocked(stdin); (*n) = 0; while (c>32) { (*n)=(*n)*10 + (c-48); c=getc_unlocked(stdin); } } //------------------------------------ int main(void) { int i, j, k, n, z, d, a, q; long long sum; char F; readInt(&n); readInt(&z); sum = 1LL*z; q=j=k=0; F=1; for(i=0; i<n; i++) { readInt(&d); readInt(&a); if(d<=a) { P[j].x=d; P[j].y=a; P[j++].id=i; } else { T[k].x=d; T[k].y=a; T[k++].id=i; } } sort(P, P+j, OrdX); for(i=0; i<j; i++) { sum -= P[i].x; if(sum<1) { F=0; break; } sum += P[i].y; Q[q++] = P[i].id; } if(F) { sort(T, T+k, OrdY); for(i=0; i<k; i++) { sum -= T[i].x; if(sum<1) { F=0; break; } sum += T[i].y; Q[q++] = T[i].id; } } if(!F) puts("NIE"); else { puts("TAK"); for (i=0; i<q-1; i++) printf("%d ", Q[i]+1); printf("%d", Q[i]+1); } return 0; } //---------------------------------- |