#include <algorithm> #include <cstdio> #include <vector> int main() { int n, z; scanf("%d%d", &n, &z); std::vector<std::pair<int, std::pair<int, int> > > dodatnie, ujemne; for(int i = 0; i < n; i++) { int d, a; scanf("%d%d", &d, &a); if(a-d >= 0) dodatnie.push_back(std::make_pair(d, std::make_pair(-(a-d), i+1))); else ujemne.push_back(std::make_pair(-a, std::make_pair(d, i+1))); } std::sort(dodatnie.begin(), dodatnie.end()); std::sort(ujemne.begin(), ujemne.end()); std::vector<int> visits; for(int i = 0; i < dodatnie.size(); i++) { visits.push_back(dodatnie[i].second.second); if(dodatnie[i].first < z) z -= dodatnie[i].second.first; else { printf("NIE\n"); return 0; } } for(int i = 0; i < ujemne.size(); i++) { //printf("odwiedzam %d\n", ujemne[i].second.second); visits.push_back(ujemne[i].second.second); if(ujemne[i].second.first < z) { //printf("przed %d\n", z); z -= ujemne[i].second.first; //printf("po ataku %d\n", z); z -= ujemne[i].first; //printf("po leczeniu %d\n", z); } else { printf("NIE\n"); return 0; } } printf("TAK\n"); for(int i = 0; i < visits.size(); i++) printf("%d ", visits[i]); 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 | #include <algorithm> #include <cstdio> #include <vector> int main() { int n, z; scanf("%d%d", &n, &z); std::vector<std::pair<int, std::pair<int, int> > > dodatnie, ujemne; for(int i = 0; i < n; i++) { int d, a; scanf("%d%d", &d, &a); if(a-d >= 0) dodatnie.push_back(std::make_pair(d, std::make_pair(-(a-d), i+1))); else ujemne.push_back(std::make_pair(-a, std::make_pair(d, i+1))); } std::sort(dodatnie.begin(), dodatnie.end()); std::sort(ujemne.begin(), ujemne.end()); std::vector<int> visits; for(int i = 0; i < dodatnie.size(); i++) { visits.push_back(dodatnie[i].second.second); if(dodatnie[i].first < z) z -= dodatnie[i].second.first; else { printf("NIE\n"); return 0; } } for(int i = 0; i < ujemne.size(); i++) { //printf("odwiedzam %d\n", ujemne[i].second.second); visits.push_back(ujemne[i].second.second); if(ujemne[i].second.first < z) { //printf("przed %d\n", z); z -= ujemne[i].second.first; //printf("po ataku %d\n", z); z -= ujemne[i].first; //printf("po leczeniu %d\n", z); } else { printf("NIE\n"); return 0; } } printf("TAK\n"); for(int i = 0; i < visits.size(); i++) printf("%d ", visits[i]); return 0; } |