///*** Naglowki i struktura drzewa autorstwa Piotra Stanczyka #include <iostream> #include <cstdio> #include <vector> #include <cmath> #include <algorithm> #include <ctime> #include <fstream> using namespace std; typedef vector<int> VI; typedef long long LL; #define FOR(x, b, e) for(int x=b; x<=(e); ++x) #define FORD(x, b, e) for(int x=b; x>=(e); x--) #define REP(x, n) for(int x=0; x<(n); ++x) #define VAR(v,n) typeof(n) v=(n) #define ALL(c) c.begin(),c.end() #define SIZE(x) (int)x.size() #define FOREACH(i,c) for(VAR(i,(c).begin());i!=(c).end();++i) #define PB push_back #define ST first #define ND second const int size = 200000; const int INF = 1000000300; ///*** struktura kopca z Cormena int PARENT(int i){return i/2;} int LEFT(int i){return 2*i;} int RIGHT(int i){return 2*i+1;} struct Monster { int d, a, id; }; LL HPBitor; int n; bool sortPreferences(Monster x, Monster y) { //if((x.a - x.d) > (y.a - y.d) && x.d < HPBitor)return true; //return false; return x.a > y.a || (x.a == y.a && x.d >= y.d); } vector <Monster> M; int main() { ios_base::sync_with_stdio(0); int n, HPBitor; VI result; Monster monster; cin>>n>>HPBitor; M.clear(); REP(x, n) { cin>>monster.d>>monster.a; monster.id = x+1; M.PB(monster); } sort(M.begin(), M.end(), sortPreferences); bool check = true; FOREACH(i, M) { if(i->d >= HPBitor) { check = false; break; } HPBitor -= i->d; HPBitor += i->a; result.PB(i->id); } if(check) { cout<<"TAK\n"; FOREACH(i, result)cout<<*i<<' '; cout<<endl; } else cout<<"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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | ///*** Naglowki i struktura drzewa autorstwa Piotra Stanczyka #include <iostream> #include <cstdio> #include <vector> #include <cmath> #include <algorithm> #include <ctime> #include <fstream> using namespace std; typedef vector<int> VI; typedef long long LL; #define FOR(x, b, e) for(int x=b; x<=(e); ++x) #define FORD(x, b, e) for(int x=b; x>=(e); x--) #define REP(x, n) for(int x=0; x<(n); ++x) #define VAR(v,n) typeof(n) v=(n) #define ALL(c) c.begin(),c.end() #define SIZE(x) (int)x.size() #define FOREACH(i,c) for(VAR(i,(c).begin());i!=(c).end();++i) #define PB push_back #define ST first #define ND second const int size = 200000; const int INF = 1000000300; ///*** struktura kopca z Cormena int PARENT(int i){return i/2;} int LEFT(int i){return 2*i;} int RIGHT(int i){return 2*i+1;} struct Monster { int d, a, id; }; LL HPBitor; int n; bool sortPreferences(Monster x, Monster y) { //if((x.a - x.d) > (y.a - y.d) && x.d < HPBitor)return true; //return false; return x.a > y.a || (x.a == y.a && x.d >= y.d); } vector <Monster> M; int main() { ios_base::sync_with_stdio(0); int n, HPBitor; VI result; Monster monster; cin>>n>>HPBitor; M.clear(); REP(x, n) { cin>>monster.d>>monster.a; monster.id = x+1; M.PB(monster); } sort(M.begin(), M.end(), sortPreferences); bool check = true; FOREACH(i, M) { if(i->d >= HPBitor) { check = false; break; } HPBitor -= i->d; HPBitor += i->a; result.PB(i->id); } if(check) { cout<<"TAK\n"; FOREACH(i, result)cout<<*i<<' '; cout<<endl; } else cout<<"NIE\n"; return 0; } |