3505 Tower Parking
問題概要
h階建で、各フロアにl台の駐車スペースのある駐車場がある。
それぞれのスペースに止まっている車が、何番目に出るかが与えられる。
ただしスペースが空の時は-1が与えられる。
このとき、全ての車が駐車場から出るまでにかかる時間を求めよ。
車は以下のようにして出る。
垂直方向にはエレベータを使って移動する。一階分の距離を移動するのに10秒かかる。
同じ階ではベルトコンベアを使って移動する。コンベアは時計回りまたは反時計回りに動き、車一台分の距離を移動するのに5秒かかる。
車はエレベータの位置(0番目)までコンベアで運ばれた後、即座にエレベータに乗るものとする。
車の台数は100台以下、h,l≦50を満たす。
解法
条件にしたがってシミュレーションすればよい。特に工夫は必要ない。
エレベータは1階とを往復するので(階-1)*20秒かかることに注意する。
コンベアは両方向に回るので、近いほうに回す。回すのにはSTLのrotateが便利。
ソースコード
int T,h,l,c[50][50]; int main(){ scanf("%d",&T); rep(U,T){ scanf("%d%d",&h,&l); rep(i,h)rep(j,l)scanf("%d",c[i]+j); int ans=0,n=1; for(;;n++){ int y,x; for(y=0;y<h;y++)for(x=0;x<l;x++)if(c[y][x]==n)goto OUT; OUT:if(y==h)break; c[y][x]=-1; ans+=y*20+min(x,l-x)*5; rotate(c[y],c[y]+x,c[y]+l); } printf("%d\n",ans); } return 0; }