#include #include struct { int start; int end; int origin; int dest; int weight; } job[1001]; struct { int pos; int finish; int used; int carry; } rob[21]; int i, j, simu=1, latest=-1, bestrob, num_rob, num_job, num_ports, sum; FILE *in; int distance( int src, int dest ) { return num_ports-((dest+(num_ports-src))%num_ports); } void assign(int j, int r ) { int u=0; u += distance( job[j].origin, rob[r].pos ); u += (2*5) + distance(job[j].dest, job[j].origin); job[j].end = job[j].start + u; rob[r].used += u; rob[r].finish = job[j].end; rob[r].pos = job[j].dest; if (latest==-1 || latest=job[i].weight) { if (rob[j].finish<=job[i].start ) if (distance(job[i].origin,rob[j].pos)=job[i].weight) { if (bestrob==-1 || rob[bestrob].finish>rob[j].finish || (rob[bestrob].finish==rob[j].finish && distance(job[i].origin,rob[j].pos)