#include <iostream>
#include <algorithm>
#include <vector>
//# dla m > 0 posortwowac rosonaco po d i probowac przyjmowac po kolei
//# dla m <= 0 posortowac rosnaco po m i probowac przyjmowac po kolei
using namespace std;
struct potwor{
int d; // obrazenia
int a; // moc eliksiru
int m; // roznica miedzy moca eliksiru a liczba obrazen
int idx;
};
bool compd (potwor p1, potwor p2) {
return (p1.d < p2.d);
}
bool compm (potwor p1, potwor p2) {
return (p2.m > p1.m);
}
int main(){
ios_base::sync_with_stdio(0);
long long int n, z, d, a, tmpz;
cin >> n >> z;
tmpz = z;
vector<potwor> dodatnie;
vector<potwor> ujemne;
dodatnie.reserve(n);
ujemne.reserve(n);
for(int i=1; i<=n; i++){
cin >> d >> a;
potwor p;
p.a = a;
p.d = d;
p.m = a-d;
p.idx = i;
z += p.m;
if(p.m >= 0)
dodatnie.push_back(p);
else
ujemne.push_back(p);
}
if(z <= 0){
cout << "NIE" << endl;
}
else{
z = tmpz;
vector<int> kolejnosc;
sort(dodatnie.begin(), dodatnie.end(), compd);
sort(ujemne.begin(), ujemne.end(), compm);
vector<potwor>::iterator it;
for(it=dodatnie.begin();it!=dodatnie.end();it++){
if(it->d >= z){
cout << "NIE" << endl;
return 0;
}
z += it->m;
kolejnosc.push_back(it->idx);
}
for(it=ujemne.begin();it!=ujemne.end();it++){
if(it->d >= z){
cout << "NIE" << endl;
return 0;
}
z += it->m;
kolejnosc.push_back(it->idx);
}
cout << "TAK" << endl;
vector<int>::iterator it2;
for(it2=kolejnosc.begin(); it2!=kolejnosc.end(); it2++){
cout << *it2 << ' ';
}
cout << endl;
}
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 | #include <iostream> #include <algorithm> #include <vector> //# dla m > 0 posortwowac rosonaco po d i probowac przyjmowac po kolei //# dla m <= 0 posortowac rosnaco po m i probowac przyjmowac po kolei using namespace std; struct potwor{ int d; // obrazenia int a; // moc eliksiru int m; // roznica miedzy moca eliksiru a liczba obrazen int idx; }; bool compd (potwor p1, potwor p2) { return (p1.d < p2.d); } bool compm (potwor p1, potwor p2) { return (p2.m > p1.m); } int main(){ ios_base::sync_with_stdio(0); long long int n, z, d, a, tmpz; cin >> n >> z; tmpz = z; vector<potwor> dodatnie; vector<potwor> ujemne; dodatnie.reserve(n); ujemne.reserve(n); for(int i=1; i<=n; i++){ cin >> d >> a; potwor p; p.a = a; p.d = d; p.m = a-d; p.idx = i; z += p.m; if(p.m >= 0) dodatnie.push_back(p); else ujemne.push_back(p); } if(z <= 0){ cout << "NIE" << endl; } else{ z = tmpz; vector<int> kolejnosc; sort(dodatnie.begin(), dodatnie.end(), compd); sort(ujemne.begin(), ujemne.end(), compm); vector<potwor>::iterator it; for(it=dodatnie.begin();it!=dodatnie.end();it++){ if(it->d >= z){ cout << "NIE" << endl; return 0; } z += it->m; kolejnosc.push_back(it->idx); } for(it=ujemne.begin();it!=ujemne.end();it++){ if(it->d >= z){ cout << "NIE" << endl; return 0; } z += it->m; kolejnosc.push_back(it->idx); } cout << "TAK" << endl; vector<int>::iterator it2; for(it2=kolejnosc.begin(); it2!=kolejnosc.end(); it2++){ cout << *it2 << ' '; } cout << endl; } return 0; } |
English