#include <cstdio>
#include <algorithm>
#define LL long long
using namespace std;
const int N = 100005;
int n, z, dsize, usize;
int down[N], up[N], dodatnie[N], ujemne[N];
bool cmpd(int a, int b)
{
return down[a] < down[b];
}
bool cmpu(int a, int b)
{
return up[a] > up[b];
}
bool symulacja(LL zycie)
{
for(int i=1; i<=dsize; i++)
{
int D = down[dodatnie[i]];
int U = up[dodatnie[i]];
if(D >= zycie)
return 0;
zycie += U - D;
}
for(int i=1; i<=usize; i++)
{
int D = down[ujemne[i]];
int U = up[ujemne[i]];
if(D >= zycie)
return 0;
zycie += U - D;
}
return zycie > 0;
}
int main()
{
scanf("%d%d", &n, &z);
for(int i=1; i<=n; i++)
{
scanf("%d%d", &down[i], &up[i]);
if(up[i] >= down[i])
dodatnie[++dsize] = i;
else
ujemne[++usize] = i;
}
sort(dodatnie+1, dodatnie+1+dsize, cmpd);
sort(ujemne+1, ujemne+1+usize, cmpu);
if(!symulacja(z))
printf("NIE");
else
{
printf("TAK\n");
for(int i=1; i<=dsize; i++)
printf("%d ", dodatnie[i]);
for(int i=1; i<=usize; i++)
printf("%d ", ujemne[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 49 50 51 52 53 54 55 56 57 58 59 60 61 | #include <cstdio> #include <algorithm> #define LL long long using namespace std; const int N = 100005; int n, z, dsize, usize; int down[N], up[N], dodatnie[N], ujemne[N]; bool cmpd(int a, int b) { return down[a] < down[b]; } bool cmpu(int a, int b) { return up[a] > up[b]; } bool symulacja(LL zycie) { for(int i=1; i<=dsize; i++) { int D = down[dodatnie[i]]; int U = up[dodatnie[i]]; if(D >= zycie) return 0; zycie += U - D; } for(int i=1; i<=usize; i++) { int D = down[ujemne[i]]; int U = up[ujemne[i]]; if(D >= zycie) return 0; zycie += U - D; } return zycie > 0; } int main() { scanf("%d%d", &n, &z); for(int i=1; i<=n; i++) { scanf("%d%d", &down[i], &up[i]); if(up[i] >= down[i]) dodatnie[++dsize] = i; else ujemne[++usize] = i; } sort(dodatnie+1, dodatnie+1+dsize, cmpd); sort(ujemne+1, ujemne+1+usize, cmpu); if(!symulacja(z)) printf("NIE"); else { printf("TAK\n"); for(int i=1; i<=dsize; i++) printf("%d ", dodatnie[i]); for(int i=1; i<=usize; i++) printf("%d ", ujemne[i]); } return 0; } |
English