Content

一列火车从 \(0\) 时刻开始从 \(1\) 号站出发,要经过 \(n\) 个站,第 \(i\) 个站的期望到达时间和离开时间分别为 \(a_i\) 和 \(b_i\),并且还有一个实际延迟时间 \(tm_i\)。具体地,第 \(i\) 个站的实际到达时间为 \(a_i-b_{i-1}+tm_i\) 时刻,当且仅当以下两种条件同时符合时离开车站:

  • 火车已经在这个车站停靠了 \(\left\lceil\dfrac{b_i-a_i}{2}\right\rceil\) 个时刻。
  • 当前时刻 \(\geqslant b_i\)。

求这列火车到达 \(n\) 号站的时刻。

数据范围:\(t\) 组数据,\(1\leqslant t\leqslant 100\),\(1\leqslant n\leqslant 100\),\(1\leqslant a_i<b_i\leqslant 10^6\),\(0\leqslant tm_i\leqslant 10^6\)。

Solution

事实上,读懂题面之后,这道题目是不难的。我们只需要做些简单的模拟,从 \(1\) 到 \(n\) 更新 \(a_i,b_i\) 为增加延迟时间之后的时刻即可。具体地,我们先把当前站的期望到站时间和离开时间 \(a_i,b_i\) 存储一下,设为 \(prea,preb\),并且将前一个站的离开时间也存储一下,设为 \(ppreb\),然后我们新的 \(a_i\) 在题目中已有公式给出,就等于 \(preb+a_i-ppreb+tm_i\),新的 \(b_i\) 由题目中的条件可知为 \(\max\{a_i+\left\lceil\dfrac{b_i-prea}{2}\right\rceil,b_i\}\)。

存储 \(prea,preb\) 的目的想必大家都很明白,因为后面 \(a_i,b_i\) 都会改变,直接拿 \(a_i,b_i\) 来代入上面的公式肯定会出错。至于 \(ppreb\) 就更不用说了。

具体看代码实现。

Code

int n, a[107], b[107], tim[107], preb, ppreb;

int main() {
MT {
n = Rint;
F(i, 1, n) a[i] = Rint, b[i] = Rint;
F(i, 1, n) tim[i] = Rint;
preb = ppreb = b[0];
F(i, 1, n) {
int prea = a[i];
a[i] = (preb + a[i] - ppreb + tim[i]);
ppreb = b[i];
b[i] = max(a[i] + (int)ceil((b[i] - prea) / 2.0), b[i]);
preb = b[i];
}
printf("%d\n", a[n]);
}
return 0;
}

CF1501A Alexey and Train 题解的更多相关文章

  1. 【CodeForces 605A】BUPT 2015 newbie practice #2 div2-E - Sorting Railway Cars

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=102419#problem/E Description An infinitely lon ...

  2. [Codeforces 606C]Sorting Railway Cars

    Description An infinitely long railway has a train consisting of n cars, numbered from 1 to n (the n ...

  3. HDU 1022 Train Problem I 模拟栈题解

    火车进站,模拟一个栈的操作,额外的栈操作,查看能否依照规定顺序出栈. 数据量非常少,故此题目非常easyAC. 直接使用数组模拟就好. #include <stdio.h> const i ...

  4. hdu1032 Train Problem II (卡特兰数)

    题意: 给你一个数n,表示有n辆火车,编号从1到n,入站,问你有多少种出站的可能.    (题于文末) 知识点: ps:百度百科的卡特兰数讲的不错,注意看其参考的博客. 卡特兰数(Catalan):前 ...

  5. Train Problem I(栈)

    Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  6. Train Problem II(卡特兰数+大数乘除)

    Train Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. Codeforces Round #257 (Div. 1)A~C(DIV.2-C~E)题解

    今天老师(orz sansirowaltz)让我们做了很久之前的一场Codeforces Round #257 (Div. 1),这里给出A~C的题解,对应DIV2的C~E. A.Jzzhu and ...

  8. An express train to reveries

    An express train to reveries time limit per test 1 second memory limit per test 256 megabytes input  ...

  9. Hdu 1022 Train Problem I 栈

    Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

随机推荐

  1. banner.txt

    Spring Boot Version: ${spring-boot.version} __----~~~~~~~~~~~------___ . . ~~//====...... __--~ ~~ - ...

  2. Discontinuous Galerkin method for steady transport problem

    下面讨论如何使用 Discontinuous Galerkin 求解恒定对流问题. 1.简介 恒定状态对流方程 \[\begin{equation} a\cdot \nabla \mathbf{u} ...

  3. 【Meta】16s rRNA和16s rDNA的区别

    在文章或宣传稿中经常看到两者滥用,实际上是不同的. 首先是各个字母的含义: 16S中的"S"是一个沉降系数,亦即反映生物大分子在离心场中向下沉降速度的一个指标,值越高,说明分子越大 ...

  4. idea中如何找到重写

    Ctrl+O 为了避免写错重写类和快速重写.

  5. linux安全性增加

    账户安全问题 Linux  默认会安装很多不必要的用户和用户组,如果不需要某些用户或者组,就要立即删除它,因为账户越多,系统就越不安全,很可能被黑客利用,进而威胁到服务器的安全. Linux系统中可以 ...

  6. mysql—将字符型数字转成数值型数字

    今天写sql语句时,相对字符串类型的数字进行排序,怎么做呢? 需要先转换成数字再进行排序 1.直接用加法 字符串+0 eg: select * from orders order by (mark+0 ...

  7. Python | 迭代器与zip的一些细节

    首先抛出一个困扰本人许久的问题: nums = [1,2,3,4,5,6] numsIter = iter(nums) for _ in zip(*[numsIter]*3): print(_) pr ...

  8. A Child's History of England.13

    Then came the boy-king, Edgar, called the Peaceful, fifteen years old. Dunstan, being still the real ...

  9. Spark基础:(一)初识Spark

    1.Spark中的Python和Scala的Shell (1): Python的Spark Shell 也就是我们常说的PySpark Shell进入我们的Spark目录中然后输入 bin/pyspa ...

  10. 大数据学习day25------spark08-----1. 读取数据库的形式创建DataFrame 2. Parquet格式的数据源 3. Orc格式的数据源 4.spark_sql整合hive 5.在IDEA中编写spark程序(用来操作hive) 6. SQL风格和DSL风格以及RDD的形式计算连续登陆三天的用户

    1. 读取数据库的形式创建DataFrame DataFrameFromJDBC object DataFrameFromJDBC { def main(args: Array[String]): U ...