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
#include <cstdio>
#include <algorithm>

using namespace std;

struct monster_t
{
    int id;
    int health;
    int potion;
    int diff;
};

bool cmp(const monster_t& p, const monster_t& q)
{
    if (p.diff > 0 && q.diff > 0)
        return p.health < q.health;
    else if (p.diff >= 0 || q.diff >= 0)
        return p.diff > q.diff;
    else
        return p.potion > q.potion;
}

int main()
{
    int N;
    long long H;
    scanf("%i%lli", &N, &H);

    monster_t* tab = new monster_t[N];

    for (int i=0; i<N; i++)
    {
        int a,b;
        scanf("%i%i", &a, &b);

        tab[i].id = i+1;
        tab[i].health = a;
        tab[i].potion = b;
        tab[i].diff = b - a;
    }

    sort(tab, tab+N, cmp);

    bool alive = true;
    for (int i=0; alive && i<N; i++)
    {
//        printf("[%i] fight with: %i (h:%i d:%i)\n", H, tab[i].id, tab[i].health, tab[i].diff);

        if (H <= tab[i].health)
        {
            printf("NIE\n");
            alive = false;
        }
        else
        {
            H += tab[i].diff;
//            printf("H after %i = %i\n", tab[i].id, H);
        }
    }

    if (alive)
    {
        printf("TAK\n");
        for (int i=0; i<N; i++)
            printf("%i ", tab[i].id);
        printf("\n");
    }

    delete [] tab;
}