题解 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;
}
posted @ 2021-03-16 20:41  Bushuai_Tang  阅读(73)  评论(0编辑  收藏  举报