#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(""); } |
English