#include <cstdio> #include <vector> #include <algorithm> #define MAKS 100010 using namespace std; typedef long long int lld; int d[MAKS]; int a[MAKS]; int s[MAKS]; lld zapas[MAKS]; lld termin[MAKS]; vector<int> dodatnie; vector<int> ujemne; vector<int> wyn; bool cmp(int a, int b) { if(d[a]!=d[b])return d[a]<d[b]; return a<b; } bool cmp2(int a, int b) { if(termin[a]!=termin[b])return termin[a]<termin[b]; return a<b; } int main() { int n; lld HP; scanf("%d %lld",&n,&HP); for(int i=0;i<n;i++) { scanf("%d %d",&d[i],&a[i]); if(a[i]-d[i]>=0)dodatnie.push_back(i); else ujemne.push_back(i); } sort(dodatnie.begin(),dodatnie.end(),cmp); for(int q=0;q<dodatnie.size();q++) { int i=dodatnie[q]; if(HP>lld(d[i])) { wyn.push_back(i+1); HP+=lld(a[i]-d[i]); } else { puts("NIE"); return 0; } } for(int q=0;q<ujemne.size();q++) { int i=ujemne[q]; if(lld(d[i])>=HP) { puts("NIE"); return 0; } zapas[i]=HP-lld(d[i]+1); s[i]=d[i]-a[i]; termin[i]=zapas[i]+lld(s[i]); //printf("i: %d, zapas: %lld, s: %d, termin: %lld\n",i,zapas[i],s[i],termin[i]); } sort(ujemne.begin(),ujemne.end(),cmp2); lld aktczas=0; for(int q=0;q<ujemne.size();q++) { int i=ujemne[q]; aktczas+=lld(s[i]); //printf("i: %d, aktczas: %lld\n",i,aktczas); if(aktczas>termin[i]) { puts("NIE"); return 0; } wyn.push_back(i+1); } puts("TAK"); for(int i=0;i<wyn.size();i++)printf("%d ",wyn[i]); puts(""); }
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 | #include <cstdio> #include <vector> #include <algorithm> #define MAKS 100010 using namespace std; typedef long long int lld; int d[MAKS]; int a[MAKS]; int s[MAKS]; lld zapas[MAKS]; lld termin[MAKS]; vector<int> dodatnie; vector<int> ujemne; vector<int> wyn; bool cmp(int a, int b) { if(d[a]!=d[b])return d[a]<d[b]; return a<b; } bool cmp2(int a, int b) { if(termin[a]!=termin[b])return termin[a]<termin[b]; return a<b; } int main() { int n; lld HP; scanf("%d %lld",&n,&HP); for(int i=0;i<n;i++) { scanf("%d %d",&d[i],&a[i]); if(a[i]-d[i]>=0)dodatnie.push_back(i); else ujemne.push_back(i); } sort(dodatnie.begin(),dodatnie.end(),cmp); for(int q=0;q<dodatnie.size();q++) { int i=dodatnie[q]; if(HP>lld(d[i])) { wyn.push_back(i+1); HP+=lld(a[i]-d[i]); } else { puts("NIE"); return 0; } } for(int q=0;q<ujemne.size();q++) { int i=ujemne[q]; if(lld(d[i])>=HP) { puts("NIE"); return 0; } zapas[i]=HP-lld(d[i]+1); s[i]=d[i]-a[i]; termin[i]=zapas[i]+lld(s[i]); //printf("i: %d, zapas: %lld, s: %d, termin: %lld\n",i,zapas[i],s[i],termin[i]); } sort(ujemne.begin(),ujemne.end(),cmp2); lld aktczas=0; for(int q=0;q<ujemne.size();q++) { int i=ujemne[q]; aktczas+=lld(s[i]); //printf("i: %d, aktczas: %lld\n",i,aktczas); if(aktczas>termin[i]) { puts("NIE"); return 0; } wyn.push_back(i+1); } puts("TAK"); for(int i=0;i<wyn.size();i++)printf("%d ",wyn[i]); puts(""); } |