#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; } |