117 A Elevator
問題
以下のような動きを無限に繰り返すエレベーターがある。
- 最初は1階にいる。
- 一秒ごとに上の階へ行く
- 最上階についたら向きを反転する
n人の客が来る。i番目の客は時間t[i]にs[i]階に来て、f[i]階で降りたい。
このとき、それぞれの客がf[i]階に着けるのは最短でいつかを求めよ。
エレベーターは容量無限で、乗り降りにかかる時間は0である。
制約条件
n≦10^5
m≦10^8
ソースコード
int n,m; void run(){ cin>>n>>m; rep(i,n){ int s,f,t; cin>>s>>f>>t; if(s==f){ cout<<t<<endl; continue; } int mod=s<f?s-1:2*(m-1)-(s-1); t-=mod; if(t<0)t=0; else t=(t/(2*(m-1))+(t%(2*(m-1))!=0))*2*(m-1); t+=mod; t+=abs(s-f); cout<<t<<endl; } }