#include <cstdio> #include <algorithm> using namespace std; class par { public: int f; int s; int dex; }; bool comp (par a, par b) { if (a.s-a.f>=0 && b.s-b.f<0) return 1; else if (a.s-a.f>=0 && b.s-b.f>=0) return a.f<b.f; else if (a.s-a.f<0 && b.s-b.f<0) { if (a.s==b.s) return a.f>b.f; return a.s>b.s; } else if (a.s-a.f<0 && b.s-b.f>=0) return 0; } int n, hp; par tab[100000]; int main () { scanf ("%d%d", &n, &hp); for (int i=0; i<n; ++i) { scanf ("%d%d", &tab[i].f, &tab[i].s); tab[i].dex=i+1; } sort (tab, tab+n, comp); for (int i=0; i<n; ++i) { hp-=tab[i].f; if (hp<=0) { printf ("NIE\n"); return 0; } hp+=tab[i].s; } printf ("TAK\n"); for (int i=0; i<n; ++i) { printf ("%d ", tab[i].dex); } printf ("\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 | #include <cstdio> #include <algorithm> using namespace std; class par { public: int f; int s; int dex; }; bool comp (par a, par b) { if (a.s-a.f>=0 && b.s-b.f<0) return 1; else if (a.s-a.f>=0 && b.s-b.f>=0) return a.f<b.f; else if (a.s-a.f<0 && b.s-b.f<0) { if (a.s==b.s) return a.f>b.f; return a.s>b.s; } else if (a.s-a.f<0 && b.s-b.f>=0) return 0; } int n, hp; par tab[100000]; int main () { scanf ("%d%d", &n, &hp); for (int i=0; i<n; ++i) { scanf ("%d%d", &tab[i].f, &tab[i].s); tab[i].dex=i+1; } sort (tab, tab+n, comp); for (int i=0; i<n; ++i) { hp-=tab[i].f; if (hp<=0) { printf ("NIE\n"); return 0; } hp+=tab[i].s; } printf ("TAK\n"); for (int i=0; i<n; ++i) { printf ("%d ", tab[i].dex); } printf ("\n"); return 0; } |