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
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstdlib>
using namespace std;
struct x{
int obr,eli,wsp,id;};
int main()
{
    int n,z,temp1,temp2,l = 0,ile,u = 0 ;
    cin>>n>>z;
    bool war = false;
    bool war2;
    char d[7]={0};
    x zm;
    string wynik = "";
    vector <x> tab;
    vector  <int> wektor;
    ile = n;
    for(int i= 0;i<n;i++)
    {
        cin>>temp1>>temp2;
        zm.obr = temp1;zm.eli = temp2;
        zm.wsp = zm.eli-zm.obr;
        zm.id = u+1;u++;
        tab.push_back(zm);
    }
    for(int q=0;q<n;q++)
    {
        for(int w= 0;w<n-1;w++)
        {
            if(tab[w].wsp<tab[w+1].wsp)
                swap(tab[w],tab[w+1]);
        }
    }

  //  for(int i = 0;i<n;i++)
    //{
      //  cout<<tab[i].wsp<<' '<<tab[i].id<<' ';
    //}
    while(tab[l].wsp>=0 &&war == false)
    {
        z-=tab[l].obr;
        ile = tab[l].id;
        if(z<=0)
        {
            war == true;
        }
        else
        {
        z+=tab[l].eli;

        wektor.push_back(ile);
        }   l++;

    }
    if(war == false)
        {
            int g = n-1;
            while(g>=l && war != true)
            {

                z-=tab[g].obr;
                ile = tab[g].id;
                if(z<=0)
                    {
                    war == true;
                    }
                else
                    {
                    z+=tab[g].eli;

                    wektor.push_back(ile);
                    //cout<<"z="<<z<<' '<<"obr[g-1]"<<tab[g-1].obr<<endl;
                    }
                g = g-1;
            }
        }
    if(wektor.size()==n)
    {
        cout<<"TAK"<<endl;
        for(int i = 0;i<wektor.size();i++)
        {
            cout<<wektor[i]<<' ';
        }
    }
else cout<<"NIE";
}