#include #include typedef struct { int vlak; int kolej; } vlak; int funkce(const void *e1, const void *e2) { if(((vlak*)e1)->vlak < ((vlak*)e2)->vlak) return -1; if(((vlak*)e1)->vlak == ((vlak*)e2)->vlak) return 0; return 1; } int main () { while (1) { int pocetvl; int pocetkol; int koleje[200000] = {0}; vlak vlaky[200000]; scanf ("%d %d\n", &pocetvl, &pocetkol); if ( !(pocetvl + pocetkol)) return 0; int i; for ( i = 0; i < pocetvl; i++) { scanf("%d",&vlaky[i].vlak); vlaky[i].kolej = 0; } char vyskocit = 0; for ( i = 0; i < pocetvl; i++) { int min = 300000; int kde = 0; int j; for ( j = 0; j < pocetkol; j++) { if (vlaky[i].vlak < koleje[j]) continue; if (min > (vlaky[i].vlak - koleje[j])) { min = vlaky[i].vlak - koleje[j]; kde = j; } } /*nema reseni*/ if (min == 300000) { printf ("Transportation failed\n"); vyskocit = 1; break; } vlaky[i].kolej = kde; koleje[kde] = vlaky[i].vlak; } if (vyskocit) continue; for (i = 0; i < pocetvl; i++) { printf ("%d ",vlaky[i].kolej + 1); } printf ("\n"); qsort(vlaky, pocetvl, sizeof(vlak), funkce); for(i = 0; i < pocetvl; i++) printf("%d ", vlaky[i].kolej + 1); printf ("\n"); } }