#include <stdio.h> #include <algorithm> using namespace std; struct potwor { int d,a,sum,index; }; bool compare(const struct potwor &a, const struct potwor&b) { if (a.sum>=0 && b.sum<0) { return true; } else if (b.sum>=0 && a.sum<0) { return false; } else { if (a.sum>=0) { //dodatnie return a.d<b.d; } else { //ujemne return a.a>b.a; } } } struct potwor potwory[100000]; int main() { int n; long long int z; scanf("%d %lld", &n, &z); int d,a; for (int i=0; i<n; ++i) { scanf("%d %d", &d, &a); potwory[i].d=d; potwory[i].a=a; potwory[i].sum=a-d; potwory[i].index=i+1; } // dzielimy na sume dodatnia i ujemna // sortujemy dodatnia po wartosci potwora i iterejumy od najmnejszego potwora // sortujemy ujemne po sumie i iterujemy od najmneijszej //std::sort(info.begin(), info.end(), compareByLength); std::sort(&potwory[0], &potwory[n],compare); // dla ujemnych: bierzemy minimalna sume, ktora zapewnia ze wszysyc inny moga byc wykonani // lub najwiekszego, po ktorym wszyscy zapewnieni bool wygra=true; for (int i=0; i<n; ++i) { //printf("%d %d %d\n", potwory[i].d, potwory[i].sum, z); if (z<=potwory[i].d) { wygra=false; break; } else { z+=potwory[i].sum; } } if (wygra) { printf("TAK\n"); for (int i=0; i<n; ++i) { printf("%d ", potwory[i].index); } printf("\n"); } else printf("NIE\n"); }
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 | #include <stdio.h> #include <algorithm> using namespace std; struct potwor { int d,a,sum,index; }; bool compare(const struct potwor &a, const struct potwor&b) { if (a.sum>=0 && b.sum<0) { return true; } else if (b.sum>=0 && a.sum<0) { return false; } else { if (a.sum>=0) { //dodatnie return a.d<b.d; } else { //ujemne return a.a>b.a; } } } struct potwor potwory[100000]; int main() { int n; long long int z; scanf("%d %lld", &n, &z); int d,a; for (int i=0; i<n; ++i) { scanf("%d %d", &d, &a); potwory[i].d=d; potwory[i].a=a; potwory[i].sum=a-d; potwory[i].index=i+1; } // dzielimy na sume dodatnia i ujemna // sortujemy dodatnia po wartosci potwora i iterejumy od najmnejszego potwora // sortujemy ujemne po sumie i iterujemy od najmneijszej //std::sort(info.begin(), info.end(), compareByLength); std::sort(&potwory[0], &potwory[n],compare); // dla ujemnych: bierzemy minimalna sume, ktora zapewnia ze wszysyc inny moga byc wykonani // lub najwiekszego, po ktorym wszyscy zapewnieni bool wygra=true; for (int i=0; i<n; ++i) { //printf("%d %d %d\n", potwory[i].d, potwory[i].sum, z); if (z<=potwory[i].d) { wygra=false; break; } else { z+=potwory[i].sum; } } if (wygra) { printf("TAK\n"); for (int i=0; i<n; ++i) { printf("%d ", potwory[i].index); } printf("\n"); } else printf("NIE\n"); } |