/*
* main.cpp
*
* Created on: 14-05-2014
* Author: adasdeb
*/
#include <iostream>
#include <set>
#include <vector>
class monster
{
private:
int n;
int damage;
int heal;
double lossesr;
public:
monster(int n, int damage, int heal)
: n(n), damage(damage), heal(heal)
{
if(heal)
lossesr = ((double)damage)/heal;
else
lossesr = 1.0e100;
}
bool operator<(const monster &loper) const
{
return lossesr < loper.lossesr;
}
int no(void) const
{
return n;
}
int dm(void) const
{
return damage;
}
int hl(void) const
{
return heal;
}
};
int main(void)
{
int monn;
long long bitorh;
std::cin.sync_with_stdio(false);
std::cin >> monn >> bitorh;
std::multiset<monster> monsters;
std::vector<int> killedm;
bool exists = true;
unsigned int lasts = 1;
for(int i = 1; i <= monn; i++)
{
int mond, mone;
std::cin >> mond >> mone;
monsters.insert(monster(i, mond, mone));
}
while(!monsters.empty())
{
if(killedm.size() == lasts)
{
std::cout << lasts;
exists = false;
break;
}
else
lasts = killedm.size();
for(std::multiset<monster>::iterator it = monsters.begin(); it != monsters.end(); ++it)
{
if(it->dm() < bitorh)
{
bitorh += it->hl() - it->dm();
killedm.push_back(it->no());
monsters.erase(it);
break;
}
}
}
if(exists)
{
std::cout << "TAK\n";
for(std::vector<int>::iterator it = killedm.begin(); it != killedm.end(); ++it)
std::cout << *it << " ";
}
else
std::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 99 100 | /* * main.cpp * * Created on: 14-05-2014 * Author: adasdeb */ #include <iostream> #include <set> #include <vector> class monster { private: int n; int damage; int heal; double lossesr; public: monster(int n, int damage, int heal) : n(n), damage(damage), heal(heal) { if(heal) lossesr = ((double)damage)/heal; else lossesr = 1.0e100; } bool operator<(const monster &loper) const { return lossesr < loper.lossesr; } int no(void) const { return n; } int dm(void) const { return damage; } int hl(void) const { return heal; } }; int main(void) { int monn; long long bitorh; std::cin.sync_with_stdio(false); std::cin >> monn >> bitorh; std::multiset<monster> monsters; std::vector<int> killedm; bool exists = true; unsigned int lasts = 1; for(int i = 1; i <= monn; i++) { int mond, mone; std::cin >> mond >> mone; monsters.insert(monster(i, mond, mone)); } while(!monsters.empty()) { if(killedm.size() == lasts) { std::cout << lasts; exists = false; break; } else lasts = killedm.size(); for(std::multiset<monster>::iterator it = monsters.begin(); it != monsters.end(); ++it) { if(it->dm() < bitorh) { bitorh += it->hl() - it->dm(); killedm.push_back(it->no()); monsters.erase(it); break; } } } if(exists) { std::cout << "TAK\n"; for(std::vector<int>::iterator it = killedm.begin(); it != killedm.end(); ++it) std::cout << *it << " "; } else std::cout << "NIE\n"; return 0; } |
English