题解 CF1501A【Alexey and Train】
概述
题号 | 难度 | \(AC\)时间及记录 |
---|---|---|
\(\texttt{CF1501A}\) | \(\texttt{洛谷难度:暂无评定}\) | \(\texttt{On 2021/03/16}\) |
题意
某人从起点站(其编号为 \(0\))坐火车在时刻 \(0\) 出发,沿线依次经过 \(N\) 个编号从 \(1\) 到 \(N\) 的火车站。列车的时刻表用 \(N\) 个数对 \((X_i,Y_i)\) 表示,描述了本来列车应该在 \(X_i\) 时刻到达第 \(i\) 个站并在 \(Y_i\) 时刻离开。
由于天气影响,列车无法按照时刻表运行,他算出了 \(N\) 个整数 \(T_i\) 描述了从第 \(i-1\) 个站到第 \(i\) 个站需要多走的时间。
列车从第 \(i\) 个站出发需要同时满足:
- 时刻大于等于 \(Y_i\)。
- 在该站停留的时间大于等于 \(\lceil\frac{Y_i - X_i}{2}\rceil\)
利用以上信息计算列车到达第 \(N\) 个站的时间。
解析
这是一道简单题。
题意不难理解。
我们按照题目大意模拟即可。
要注意的就是最后一次不用再判定停靠时间了。
其他情况下:
\[Time=max(Time,Brray[i]);
\]
其中 \(Time\) 是这样算的:
\[Time=Time+Array[i]-Brray[i-1]+Trray[i]+(int)ceil(1.0*(Brray[i]-Array[i])/2);
\]
代码
/*
Author:Xsmyy
Problem:CF1501A
Date:2021/03/13
*/
#include<bits/stdc++.h>
#define BetterIO ios::sync_with_stdio(false)
using namespace std;
int N;
int Array[101],Brray[101];
int Trray[101];
int main(void)
{
BetterIO;
#ifndef ONLINE_JUDGE
freopen("SampleIN.in","r",stdin);
#else
#endif
register int Case;
cin>>Case;
while(Case--)
{
register int i;
cin>>N;
for(i=1;i<=N;i++)cin>>Array[i]>>Brray[i];
for(i=1;i<=N;i++)cin>>Trray[i];
// cout<<Brray[0];
register int Time=0;
for(i=1;i<N;i++)
{
Time+=Array[i]-Brray[i-1]+Trray[i]+(int)ceil(1.0*(Brray[i]-Array[i])/2);
Time=max(Time,Brray[i]);
// cout<<Time<<endl;
}
Time+=Array[i]-Brray[i-1]+Trray[i];
cout<<Time<<endl;
}
return 0;
}
不要妄图追上西坠的太阳,而是要在黎明前就等着它!