/* SWERC'98 - Going in circles on Alpha Centauri */ /* 10/19/98 - Matthias Ruhl */ #include #define MAXROBOTS 20 #define MAXREQUESTS 5000 const int debug = 0; typedef struct { int time,origin,dest,weight; int done; } request; typedef struct { int idle,loaded,pos,wait,util,req; int origin,dest; int capacity; } transrob; FILE *inp; int m,n,rnum; int beg,end; int case_no = 1; request r[MAXREQUESTS]; transrob t[MAXROBOTS]; int read_data() { int i; fscanf(inp,"%d %d",&n,&m); if(n == 0 && m == 0) return 0; for(i=0;i= r[i].weight && (r[i].origin-t[j].pos+n)%n < dist) { tr = j; dist = (r[i].origin-t[j].pos+n)%n; } if(tr != -1) { ass++; t[tr].idle = 0; t[tr].wait = (r[i].origin-t[tr].pos+n)%n + (r[i].dest-r[i].origin+n)%n + 2*5; t[tr].util += t[tr].wait; t[tr].pos = r[i].dest; r[i].done = tim+t[tr].wait; } } return ass; } void move_robot(int rob) { if(t[rob].idle) return; t[rob].wait--; if(t[rob].wait == 0) t[rob].idle = 1; } void do_simulation() { int i,reqleft,idlenum; reqleft = rnum; idlenum = m; beg = r[0].time; end = beg; while(reqleft > 0 || idlenum < m) { reqleft -= assign_requests(end++); idlenum = 0; for(i=0;i