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
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;

vector<pair<int, pair<int, int> > > dodatnie, ujemne;
vector<int> wynik;

int main()
{
    long long hp;
    int n, d, a;
    bool czy_mozna=true;
    scanf("%d%lld", &n, &hp);
    for(int i=1; i<=n; i++)
    {
        scanf("%d%d", &d, &a);
        if(a-d>0) dodatnie.push_back(make_pair(d, make_pair(a-d, i))); //po stratach
        else ujemne.push_back(make_pair(a, make_pair(d, i))); //po leczeniu
    }
    sort(dodatnie.begin(), dodatnie.end());
    sort(ujemne.begin(), ujemne.end());
    for(int i=0; i<dodatnie.size(); i++)
    {
        if((long long)dodatnie[i].first<hp)
        {
            hp+=(long long)dodatnie[i].second.first;
            wynik.push_back(dodatnie[i].second.second);
        }
        else czy_mozna=false;
    }
    for(int i=ujemne.size()-1; i>=0; i--)
    {
        if((long long)ujemne[i].second.first<hp)
        {
            hp+=(long long)(ujemne[i].first-ujemne[i].second.first);
            wynik.push_back(ujemne[i].second.second);
        }
        else czy_mozna=false;
    }
    if(czy_mozna)
    {
        printf("TAK\n");
        for(int i=0; i<wynik.size(); i++) printf("%d ", wynik[i]);
    }
    else printf("NIE\n");
}