#include <cstdio> #include <vector> #include <algorithm> #include <iostream> #define PB push_back #define MP make_pair #define ST first #define ND second using namespace std; int ilosc; long long zycie, a, b, c; bool wynik = true; vector <pair<pair<long long,long long>,int> > Zle; vector <pair<pair<long long,long long>,int> > Dobre; vector <int> Res; bool comp( pair<pair<long long,long long>,int> A, pair<pair<long long,long long>,int> B) { // if(A.ST.ST == B.ST.ST) // return A.ST.ND >= B.ST.ND; return A.ST.ND > B.ST.ND; } int main() { scanf("%d %d", &ilosc, &zycie); for(int i = 1; i <= ilosc; i++) { scanf("%lld %lld", &a, &b); if(b >= a) Dobre.PB(MP(MP(a,b),i)); else Zle.PB(MP(MP(a,b),i)); } sort(Dobre.begin(),Dobre.end()); for(int i = 0; i < Dobre.size(); i++) { a = Dobre[i].ST.ST; b = Dobre[i].ST.ND; c = Dobre[i].ND; if(a < zycie) { zycie += b-a; Res.PB(c); } else wynik = 0; } sort(Zle.begin(),Zle.end(),comp); for(int i = 0; i < Zle.size(); i++) { a = Zle[i].ST.ST; b = Zle[i].ST.ND; c = Zle[i].ND; if(a < zycie) { zycie += b-a; Res.PB(c); } else wynik = 0; } if(!wynik) printf("NIE\n"); else { printf("TAK\n"); for(int i = 0; i < ilosc; i++) printf("%d ", Res[i]); } }
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 | #include <cstdio> #include <vector> #include <algorithm> #include <iostream> #define PB push_back #define MP make_pair #define ST first #define ND second using namespace std; int ilosc; long long zycie, a, b, c; bool wynik = true; vector <pair<pair<long long,long long>,int> > Zle; vector <pair<pair<long long,long long>,int> > Dobre; vector <int> Res; bool comp( pair<pair<long long,long long>,int> A, pair<pair<long long,long long>,int> B) { // if(A.ST.ST == B.ST.ST) // return A.ST.ND >= B.ST.ND; return A.ST.ND > B.ST.ND; } int main() { scanf("%d %d", &ilosc, &zycie); for(int i = 1; i <= ilosc; i++) { scanf("%lld %lld", &a, &b); if(b >= a) Dobre.PB(MP(MP(a,b),i)); else Zle.PB(MP(MP(a,b),i)); } sort(Dobre.begin(),Dobre.end()); for(int i = 0; i < Dobre.size(); i++) { a = Dobre[i].ST.ST; b = Dobre[i].ST.ND; c = Dobre[i].ND; if(a < zycie) { zycie += b-a; Res.PB(c); } else wynik = 0; } sort(Zle.begin(),Zle.end(),comp); for(int i = 0; i < Zle.size(); i++) { a = Zle[i].ST.ST; b = Zle[i].ST.ND; c = Zle[i].ND; if(a < zycie) { zycie += b-a; Res.PB(c); } else wynik = 0; } if(!wynik) printf("NIE\n"); else { printf("TAK\n"); for(int i = 0; i < ilosc; i++) printf("%d ", Res[i]); } } |