Alexey and Train (Codeforces 1501A)
Tags: Implement, implementation

Alexey is travelling on a train. Unfortunately, due to the bad weather, the train moves slower that it should!Alexey took the train at the railroad terminal. Let's say that the train starts from the terminal at the moment $$$0$$$. Also, let's say that the train will visit $$$n$$$ stations numbered from $$$1$$$ to $$$n$$$ along its way, and that Alexey destination is the station $$$n$$$.Alexey learned from the train schedule $$$n$$$ integer pairs $$$(a_i, b_i)$$$ where $$$a_i$$$ is the expected time of train's arrival at the $$$i$$$-th station and $$$b_i$$$ is the expected time of departure.Also, using all information he has, Alexey was able to calculate $$$n$$$ integers $$$tm_1, tm_2, \dots, tm_n$$$ where $$$tm_i$$$ is the extra time the train need to travel from the station $$$i - 1$$$ to the station $$$i$$$. Formally, the train needs exactly $$$a_i - b_{i-1} + tm_i$$$ time to travel from station $$$i - 1$$$ to station $$$i$$$ (if $$$i = 1$$$ then $$$b_0$$$ is the moment the train leave the terminal, and it's equal to $$$0$$$).The train leaves the station $$$i$$$, if both conditions are met:   it's on the station for at least $$$\left\lceil \frac{b_i - a_i}{2} \right\rceil$$$ units of time (division with ceiling);  current time $$$\ge b_i$$$. Since Alexey spent all his energy on prediction of time delays, help him to calculate the time of arrival at the station $$$n$$$.

Input: The first line contains one integer $$$t$$$ ($$$1 \le t \le 100$$$) — the number of test cases.The first line of each test case contains the single integer $$$n$$$ ($$$1 \le n \le 100$$$) — the number of stations.Next $$$n$$$ lines contain two integers each: $$$a_i$$$ and $$$b_i$$$ ($$$1 \le a_i < b_i \le 10^6$$$). It's guaranteed that $$$b_i < a_{i+1}$$$. Next line contains $$$n$$$ integers $$$tm_1, tm_2, \dots, tm_n$$$ ($$$0 \le tm_i \le 10^6$$$).

Output: For each test case, print one integer — the time of Alexey's arrival at the last station.

Note: In the first test case, Alexey arrives at station $$$1$$$ without any delay at the moment $$$a_1 = 2$$$ (since $$$tm_1 = 0$$$). After that, he departs at moment $$$b_1 = 4$$$. Finally, he arrives at station $$$2$$$ with $$$tm_2 = 2$$$ extra time, or at the moment $$$12$$$.In the second test case, Alexey arrives at the first station with $$$tm_1 = 1$$$ extra time, or at moment $$$2$$$. The train, from one side, should stay at the station at least $$$\left\lceil \frac{b_1 - a_1}{2} \right\rceil = 2$$$ units of time and from the other side should depart not earlier than at moment $$$b_1 = 4$$$. As a result, the trains departs right at the moment $$$4$$$.Using the same logic, we can figure out that the train arrives at the second station at the moment $$$9$$$ and departs at the moment $$$10$$$; at the third station: arrives at $$$14$$$ and departs at $$$15$$$; at the fourth: arrives at $$$22$$$ and departs at $$$23$$$. And, finally, arrives at the fifth station at $$$32$$$.

Sample Inputs:
2
2
2 4
10 12
0 2
5
1 4
7 8
9 10
13 15
19 20
1 2 3 4 5

Sample Outputs:
12
32

Solution (Python):
def solve():
    size = int(input())
    station = [(0, 0)] + [tuple(map(int, input().split())) for _ in range(size)]
    numbers = [0] + list(map(int, input().split()))
    total = 0
    t = 0
    for i in range(1, size + 1):
        total = t + (station[i][0] - station[i - 1][1]) + numbers[i]
        t = max(station[i][1], total + (station[i][1] - station[i][0] + 1) // 2)
    print(total)
if __name__ == '__main__':
    for test in range(int(input())):
        solve()

Solution (Python):
R = lambda : map(int, input().split())
(t,) = R()
while t:
    t -= 1
    (n,) = R()
    (a, b) = zip(*(R() for _ in [0] * n))
    s = 0
    for (x, y, z, w) in zip(a, b, (0, *b), R()):
        p = s + x - z + w
        s = p + max(y - x + 1 >> 1, y - p)
    print(p)

Solution (Python):
I = lambda : [*map(int, input().split())]
for _ in ' ' * I()[0]:
    n = I()[0] + 1
    a = [0] * n
    b = [0] * n
    for i in range(1, n):
        (a[i], b[i]) = I()
    t = I()
    ans = 0
    for i in range(1, n):
        ans += a[i] - b[i - 1] + t[i - 1]
        if i < n - 1:
            ans += max(b[i] - ans, (b[i] - a[i] + 1) // 2)
    print(ans)