#include<stdio.h>
void sr(int t[],int p[],int q[],int n)
{
int i,j,k,m,x,y,z;
for(i=2;i<=n;i++)
{
j=i;
k=j/2;
x=t[i];
y=p[i];
z=q[i];
while((t[k]<x)&&(k>0))
{
t[j]=t[k];
p[j]=p[k];
q[j]=q[k];
j=k;
k=j/2;
}
t[j]=x;
p[j]=y;
q[j]=z;
}
for(i=n;i>1;i--)
{
x=t[1];
y=p[1];
z=q[1];
t[1]=t[i];
p[1]=p[i];
q[1]=q[i];
t[i]=x;
p[i]=y;
q[i]=z;
j=1;
k=2;
while(k<i)
{
if((t[k+1]>t[k])&&(k+1<i))
m=k+1;
else
m=k;
if(t[m]<=t[j])
break;
x=t[j];
y=p[j];
z=q[j];
t[j]=t[m];
p[j]=p[m];
q[j]=q[m];
t[m]=x;
p[m]=y;
q[m]=z;
j=m;
k=j+j;
}
}
return;
}
main()
{
int n,z,x,y,d=0,u=0,i;
long long int zz;
scanf("%d %d",&n,&z);
zz=z;
int pd[n],pu[n],zd[n],zu[n],ku[n],kd[n];
for(i=0;i<n;i++)
{
scanf("%d %d",&x,&y);
if(x>y)
{
pu[u]=x;
zu[u]=y;
ku[u]=i;
u++;
}
else
{
pd[d]=x;
zd[d]=y;
kd[d]=i;
d++;
}
}
sr(pd-1,zd-1,kd-1,d);
sr(zu-1,pu-1,ku-1,u);
for(i=0;i<d;i++)
{
zz-=pd[i];
if(zz<=0)
{
printf("NIE");
return 0;
}
zz+=zd[i];
}
for(i=u-1;i>=0;i--)
{
zz-=pu[i];
if(zz<=0)
{
printf("NIE");
return 0;
}
zz+=zu[i];
}
printf("TAK\n");
for(i=0;i<d;i++)
printf("%d ",kd[i]+1);
for(i=u-1;i>=0;i--)
printf("%d ",ku[i]+1);
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 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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | #include<stdio.h> void sr(int t[],int p[],int q[],int n) { int i,j,k,m,x,y,z; for(i=2;i<=n;i++) { j=i; k=j/2; x=t[i]; y=p[i]; z=q[i]; while((t[k]<x)&&(k>0)) { t[j]=t[k]; p[j]=p[k]; q[j]=q[k]; j=k; k=j/2; } t[j]=x; p[j]=y; q[j]=z; } for(i=n;i>1;i--) { x=t[1]; y=p[1]; z=q[1]; t[1]=t[i]; p[1]=p[i]; q[1]=q[i]; t[i]=x; p[i]=y; q[i]=z; j=1; k=2; while(k<i) { if((t[k+1]>t[k])&&(k+1<i)) m=k+1; else m=k; if(t[m]<=t[j]) break; x=t[j]; y=p[j]; z=q[j]; t[j]=t[m]; p[j]=p[m]; q[j]=q[m]; t[m]=x; p[m]=y; q[m]=z; j=m; k=j+j; } } return; } main() { int n,z,x,y,d=0,u=0,i; long long int zz; scanf("%d %d",&n,&z); zz=z; int pd[n],pu[n],zd[n],zu[n],ku[n],kd[n]; for(i=0;i<n;i++) { scanf("%d %d",&x,&y); if(x>y) { pu[u]=x; zu[u]=y; ku[u]=i; u++; } else { pd[d]=x; zd[d]=y; kd[d]=i; d++; } } sr(pd-1,zd-1,kd-1,d); sr(zu-1,pu-1,ku-1,u); for(i=0;i<d;i++) { zz-=pd[i]; if(zz<=0) { printf("NIE"); return 0; } zz+=zd[i]; } for(i=u-1;i>=0;i--) { zz-=pu[i]; if(zz<=0) { printf("NIE"); return 0; } zz+=zu[i]; } printf("TAK\n"); for(i=0;i<d;i++) printf("%d ",kd[i]+1); for(i=u-1;i>=0;i--) printf("%d ",ku[i]+1); return 0; } |
English