#include<stdio.h>
#include<stdlib.h>
struct potwor {
int numer;
int obrazenia;
int eliksir;
};
int porownaj(const void * a, const void * b) {
struct potwor _a=*(struct potwor*)a;
struct potwor _b=*(struct potwor*)b;
return _a.obrazenia-_b.obrazenia;
}
int porownaj2(const void * a, const void * b) {
struct potwor _a=*(struct potwor*)a;
struct potwor _b=*(struct potwor*)b;
if( _b.obrazenia-_a.obrazenia )
return _b.obrazenia-_a.obrazenia;
else
return _b.eliksir-_a.eliksir;
}
main(){
int liczba_potworow,obrazenia,eliksir,i=0,j=0,k=0,l=0;
long long int zdrowie;
struct potwor premia[100000];
struct potwor deficyt[100000];
scanf("%d %lli",&liczba_potworow,&zdrowie);
for(i=0;i<liczba_potworow;i++) {
scanf("%d %d",&obrazenia,&eliksir);
if(obrazenia>eliksir) {
deficyt[j].numer=i+1;
deficyt[j].obrazenia=obrazenia;
deficyt[j].eliksir=eliksir;
j++;
} else {
premia[k].numer=i+1;
premia[k].obrazenia=obrazenia;
premia[k].eliksir=eliksir;
k++;
}
}
qsort(premia,k,sizeof(struct potwor),porownaj);
/* for(i=0;i<k;i++) {
printf("%d %d %d\n",premia[i].numer,premia[i].obrazenia,premia[i].eliksir);
}*/
qsort(deficyt,j,sizeof(struct potwor),porownaj2);
/*for(i=0;i<j;i++) {
printf("%d %d %d\n",deficyt[i].numer,deficyt[i].obrazenia,deficyt[i].eliksir);
}*/
for(i=0;i<k;i++) {
if(premia[i].obrazenia<zdrowie) {
zdrowie=zdrowie-premia[i].obrazenia+premia[i].eliksir;
} else {
printf("NIE\n");
return 0;
}
}
for(i=0;i<j;i++) {
if(deficyt[i].obrazenia<zdrowie) {
zdrowie=zdrowie-deficyt[i].obrazenia+deficyt[i].eliksir;
} else {
printf("NIE\n");
return 0;
}
}
printf("TAK\n");
for(i=0;i<k;i++) {
printf("%d ",premia[i].numer);
}
for(i=0;i<j;i++) {
printf("%d ",deficyt[i].numer);
}
printf("\n");
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 | #include<stdio.h> #include<stdlib.h> struct potwor { int numer; int obrazenia; int eliksir; }; int porownaj(const void * a, const void * b) { struct potwor _a=*(struct potwor*)a; struct potwor _b=*(struct potwor*)b; return _a.obrazenia-_b.obrazenia; } int porownaj2(const void * a, const void * b) { struct potwor _a=*(struct potwor*)a; struct potwor _b=*(struct potwor*)b; if( _b.obrazenia-_a.obrazenia ) return _b.obrazenia-_a.obrazenia; else return _b.eliksir-_a.eliksir; } main(){ int liczba_potworow,obrazenia,eliksir,i=0,j=0,k=0,l=0; long long int zdrowie; struct potwor premia[100000]; struct potwor deficyt[100000]; scanf("%d %lli",&liczba_potworow,&zdrowie); for(i=0;i<liczba_potworow;i++) { scanf("%d %d",&obrazenia,&eliksir); if(obrazenia>eliksir) { deficyt[j].numer=i+1; deficyt[j].obrazenia=obrazenia; deficyt[j].eliksir=eliksir; j++; } else { premia[k].numer=i+1; premia[k].obrazenia=obrazenia; premia[k].eliksir=eliksir; k++; } } qsort(premia,k,sizeof(struct potwor),porownaj); /* for(i=0;i<k;i++) { printf("%d %d %d\n",premia[i].numer,premia[i].obrazenia,premia[i].eliksir); }*/ qsort(deficyt,j,sizeof(struct potwor),porownaj2); /*for(i=0;i<j;i++) { printf("%d %d %d\n",deficyt[i].numer,deficyt[i].obrazenia,deficyt[i].eliksir); }*/ for(i=0;i<k;i++) { if(premia[i].obrazenia<zdrowie) { zdrowie=zdrowie-premia[i].obrazenia+premia[i].eliksir; } else { printf("NIE\n"); return 0; } } for(i=0;i<j;i++) { if(deficyt[i].obrazenia<zdrowie) { zdrowie=zdrowie-deficyt[i].obrazenia+deficyt[i].eliksir; } else { printf("NIE\n"); return 0; } } printf("TAK\n"); for(i=0;i<k;i++) { printf("%d ",premia[i].numer); } for(i=0;i<j;i++) { printf("%d ",deficyt[i].numer); } printf("\n"); return 0; } |
English