2010年11月9日火曜日

TopCoder 練習 OptimalQueues(SRM 297 Div1 Easy)

OptimalQueues(SRM 297 Div1 Easy)

■問題
一度の手続きにserviceTime分かかる窓口がtellerCount個ある.
既に入り口でclientArrivals[i]分待っている客がn人いる.全ての客に対して手続きを行うが,待ち時間の最大値を最小化したい.最小化するように客を選んだ時,その最小値はいくらか.

■解法
まずソートする.つまり,待ち時間clientArrivals[i]が大きい客から手続きを行う(この方法が最も待ち時間が少なくなるやり方).この時,i番目の客の総待ち時間は,
clientArrivals[i]+(i/tellerCount+1)serviceTime
となる.i=[1,n]について調べ,最大値を返せば良い.

import java.lang.*;
import java.util.*;

public class OptimalQueues{
public int minWaitingTime(int[] clientArrivals, int tellerCount, int serviceTime){
for(int i=0;i<clientArrivals.length;i++) clientArrivals[i]*=-1;
Arrays.sort(clientArrivals);
for(int i=0;i<clientArrivals.length;i++) clientArrivals[i]*=-1;
int ret=0;
for(int i=0;i<clientArrivals.length;i++){
ret=Math.max(ret,clientArrivals[i]+(i/tellerCount+1)*serviceTime);
}
return ret;
}
}

0 件のコメント: