#include #include #include #include #include #include #define D 0 #if D #define _V(_vna, _prf) printf("%s: %"#_prf" (L %d)\n", #_vna, _vna, __LINE__) #else #define _V(_, __) #endif int bb[22]; int tra[22], pos[22]; int po, ro; int tim, atim, btim; int zt[1111], von[1111], zu[1111], gew[1111]; int main(C) { int i, j, u, weti, uti, anzlad, machlad; FILE *f=fopen("centauri.in","r"); while(fscanf(f,"%d%d", &po, &ro),po||ro) { for (i = 0; i < ro; i++) { fscanf(f, "%d", &tra[i]); bb[i] = pos[i] = 0; } tim = 0;atim = -1; anzlad = 0; while (fscanf(f,"%d%d%d%d", &zt[anzlad], &von[anzlad], &zu[anzlad], &gew[anzlad]),zt[anzlad] != -1) { if (atim == -1) atim = zt[anzlad]; /*_V(zt[anzlad], d);_V(von[anzlad],d);_V(zu[anzlad],d);_V(gew[anzlad],d);*/ von[anzlad]--; zu[anzlad]--; anzlad++; } weti = 0; uti = 0; btim = 0; machlad = 0; while (machlad < anzlad) { int dist, ndi, robbi; i = 0; while (i < anzlad && zt[i] <= tim) { if (zt[i] != -1) { dist = 2*po; robbi = -1; for (j = 0; j < ro;j++) if (bb[j] <= tim && tra[j] >= gew[i]) { ndi = (von[i] - pos[j] + po)%po; if (ndi < dist) { dist = ndi; robbi = j; } } if (robbi != -1) { int schaff; /*_V(i, d);_V(robbi, d);*/ schaff = 10 + dist + (zu[i] - von[i] + po)%po;; bb[robbi] = tim + schaff; uti += schaff; weti += schaff + (tim - zt[i]); _V(tim - zt[i], d); if (bb[robbi] > btim) btim = bb[robbi]; pos[robbi] = zu[i]; machlad++; zt[i] = -1; } } i++; } tim++; } printf("Simulation %d\nAverage wait time = %.3f minutes\n", C++, (double) weti / (double) anzlad); printf("Average utilization = %.3f %%\n\n", (double) uti / (((double) btim - atim) * (double) ro) * 100.0); } return 0; }