2010年11月6日土曜日

TopCoder 練習

TheCoffeeTimeDivOne(SRM 479 Div1 Easy)

■問題
コーヒーと紅茶を乗客に配るのにかかる時間を求める問題.

■解法
全ての乗客に対して調べ上げても44,777,777回のループですので時間的には余裕.
ある乗客にコーヒーor紅茶のどちらを配るか,を調べるには,binarySearchでは間に合わないので,boolean配列を作りました.意外にもメモリが足りました.

public class TheCoffeeTimeDivOne{
public long find(int n, int[] tea){
int max=44777777;
boolean[] f=new boolean[max+1];
for(int t:tea){
f[t]=true;
}
int t=0,c=0;
long ret=(long)n*4;
for(int i=n;i>=1;i--){
if(f[i]){
// tea
if(t==0){
ret+=47+i*2;
}
t=(t+1)%7;
}else{
if(c==0){
ret+=47+i*2;
}
c=(c+1)%7;
}
}
return ret;
}
}

0 件のコメント: