問題はこちら
No.139 交差点 - yukicoder
スタートしてからの経過時間をsとおく
交差点の信号は周期2*T[i]なので、s%(2*T[i])で場合分けすれば良さそう
信号を最後まで渡り切るためには時刻0~(T[i]-W[i])の間に渡り始めることは必要十分
さもなくば次の青信号まで待ち時間が発生する
int main(){ int s=0,p=0,x[110],w[110],t[110],L,i,n; //sは経過時間、pは現在位置 scanf("%d%d",&n,&L); for(i=0;i<n;i++)scanf("%d%d%d",x+i,w+i,t+i); for(i=0;i<n;i++){ s+=x[i]-p; p=x[i]; //交差点の直前まで進み、経過時間と現在位置を更新 if(t[i]-w[i]<s%(t[i]*2))s+=t[i]*2-s%(t[i]*2); //渡れないなら次の青まで待機 } printf("%d",s+L-p); //最後の交差点から友人宅につくまでL-p進む return 0; }
もちろん配列に読み込む必要はなく、頭から順に処理していけば良い
s,a,x,w,t; main(L){ for(scanf("%*d%d",&L);~scanf("%d%d%d",&x,&w,&t);t-w<s%(t*=2)?s+=t-s%t:0)s+=x-a,a=x; s=!printf("%d",s+L-a); }
124B