#include<cstdio> #include<algorithm> #include<vector> using namespace std; #define F first #define S second #define MP make_pair #define LL long long #define PB push_back struct mon { int a, b, i; }; vector<mon> V1, V2; vector<int> W1, W2; bool cmp1(mon x, mon y) { return x.a<y.a; } bool cmp2(mon x, mon y) { return x.b<y.b; } int main() { int n; LL li, el; bool b=1; scanf("%d%lld", &n, &li); el=li; for(int i=0; i<n; i++) { mon x; scanf("%d%d", &x.a, &x.b); x.i=i; if(x.a<=x.b) V1.PB(x); else V2.PB(x); el-=x.a; el+=x.b; } if(el<=0) { printf("NIE\n"); return 0; } sort(V1.begin(), V1.end(), cmp1); sort(V2.begin(), V2.end(), cmp2); for(int i=0; i<V1.size(); i++) { if(li<=V1[i].a) { b=0; break; } li+=(V1[i].b-V1[i].a); } for(int i=0; i<V2.size(); i++) { if(el<=V2[i].b) { b=0; break; } el+=(V2[i].a-V2[i].b); } if(b) { printf("TAK\n"); for(int i=0; i<V1.size(); i++) printf("%d ", V1[i].i+1); for(int i=V2.size()-1; i>=0; i--) printf("%d ", V2[i].i+1); printf("\n"); } else printf("NIE\n"); 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 77 78 79 80 | #include<cstdio> #include<algorithm> #include<vector> using namespace std; #define F first #define S second #define MP make_pair #define LL long long #define PB push_back struct mon { int a, b, i; }; vector<mon> V1, V2; vector<int> W1, W2; bool cmp1(mon x, mon y) { return x.a<y.a; } bool cmp2(mon x, mon y) { return x.b<y.b; } int main() { int n; LL li, el; bool b=1; scanf("%d%lld", &n, &li); el=li; for(int i=0; i<n; i++) { mon x; scanf("%d%d", &x.a, &x.b); x.i=i; if(x.a<=x.b) V1.PB(x); else V2.PB(x); el-=x.a; el+=x.b; } if(el<=0) { printf("NIE\n"); return 0; } sort(V1.begin(), V1.end(), cmp1); sort(V2.begin(), V2.end(), cmp2); for(int i=0; i<V1.size(); i++) { if(li<=V1[i].a) { b=0; break; } li+=(V1[i].b-V1[i].a); } for(int i=0; i<V2.size(); i++) { if(el<=V2[i].b) { b=0; break; } el+=(V2[i].a-V2[i].b); } if(b) { printf("TAK\n"); for(int i=0; i<V1.size(); i++) printf("%d ", V1[i].i+1); for(int i=V2.size()-1; i>=0; i--) printf("%d ", V2[i].i+1); printf("\n"); } else printf("NIE\n"); return 0; } |