#include <stdio.h> #include <stdlib.h> //#include <math.h> typedef struct _pot{ int nr; int d; int a; }pot; int cmpp( const void * sp1, const void * sp2 ){ if ( ((pot*)sp1)->d > ((pot*)sp2)->d ) return 1; if ( ((pot*)sp1)->d < ((pot*)sp2)->d ) return -1; return 0; } int cmpm( const void * sp1, const void * sp2 ){ if ( ((pot*)sp1)->a < ((pot*)sp2)->a ) return 1; if ( ((pot*)sp1)->a > ((pot*)sp2)->a ) return -1; return 0; } int main(int argc, char *argv[]){ int n; //ilosc potworow int z; //ilosc ponktow zycia int np = 0; // ilosc dodatnich int nm = 0; // ilosc ujemnych pot * sp; int d,a; int k; scanf( "%d %d", &n, &z ); sp = (pot *)malloc( n*sizeof(pot) ); k = n; for (k=1; k<=n; k++) { scanf( "%d %d", &d, &a ); if ( d > a ){ nm += 1; sp[n - nm].nr = k; sp[n - nm].d = d; sp[n - nm].a = a; }else{ sp[np].nr = k; sp[np].d = d; sp[np].a = a; np += 1; } } qsort( sp, np, sizeof(pot), cmpp ); qsort( sp + np, nm, sizeof(pot), cmpm ); //test for (k=0; k<n; k++){ if (sp[k].d < z){ z += sp[k].a - sp[k].d; }else{ printf("NIE\n"); return 0; } } // wynik printf("TAK\n"); for (k=0; k<n-1; k++){ printf("%d ", sp[k].nr ); } printf("%d\n", sp[k].nr ); 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 | #include <stdio.h> #include <stdlib.h> //#include <math.h> typedef struct _pot{ int nr; int d; int a; }pot; int cmpp( const void * sp1, const void * sp2 ){ if ( ((pot*)sp1)->d > ((pot*)sp2)->d ) return 1; if ( ((pot*)sp1)->d < ((pot*)sp2)->d ) return -1; return 0; } int cmpm( const void * sp1, const void * sp2 ){ if ( ((pot*)sp1)->a < ((pot*)sp2)->a ) return 1; if ( ((pot*)sp1)->a > ((pot*)sp2)->a ) return -1; return 0; } int main(int argc, char *argv[]){ int n; //ilosc potworow int z; //ilosc ponktow zycia int np = 0; // ilosc dodatnich int nm = 0; // ilosc ujemnych pot * sp; int d,a; int k; scanf( "%d %d", &n, &z ); sp = (pot *)malloc( n*sizeof(pot) ); k = n; for (k=1; k<=n; k++) { scanf( "%d %d", &d, &a ); if ( d > a ){ nm += 1; sp[n - nm].nr = k; sp[n - nm].d = d; sp[n - nm].a = a; }else{ sp[np].nr = k; sp[np].d = d; sp[np].a = a; np += 1; } } qsort( sp, np, sizeof(pot), cmpp ); qsort( sp + np, nm, sizeof(pot), cmpm ); //test for (k=0; k<n; k++){ if (sp[k].d < z){ z += sp[k].a - sp[k].d; }else{ printf("NIE\n"); return 0; } } // wynik printf("TAK\n"); for (k=0; k<n-1; k++){ printf("%d ", sp[k].nr ); } printf("%d\n", sp[k].nr ); return 0; } |