题解:CF2094B Bobritto Bandito

· · 题解

题目大意

在一个小镇上,在一条无穷数线上有无数栋房子,房子的位置是 \ldots, -2, -1, 0, 1, 2, \ldots 。在第 0 天,他让房子 0 的不幸居民感染了瘟疫。接下来的每一天,瘟疫都会传播到 1 个相邻的健康家庭。

你知道在 n 天后, [l, r] 段被感染了。请找出可能在第 m( m \le n ) 被感染的线段 [l', r']

思路

首先一定要清楚,瘟疫是从 0 处开始传播的,那么最终答案也一定要包含 0,也就是 0 \in [l', r']

那我们先假定 l' = 0, 这样就直接保证了上面的要求。而且很容易就能发现,[l,r] 的长度,是比 [l',r'] 的长度小 m-n 天的。这样我们就得到了答案。

但是要注意一点,[l',r'] \subseteq [l,r]。所以我们将答案区间向左平移,使上式成立。

代码

#include<bits/stdc++.h>
using namespace std;
int main() {
    int T; cin >> T;
    while(T--) {
        int a, b, c, d; cin >> a >> b >> c >> d;
        int y = d-a+b-c, x = 0; 
        while(y > d) x--, y--;
        cout << x << " " << y << "\n";
    }
    return 0;
}