题解:CF2094B Bobritto Bandito

· · 题解

一道模拟题,但是不用真正模拟。观察以后发现,如果 l 或者 r 的绝对值大于等于 m,那么我们只需要让病毒沿着那一个方向走就行了,从 0 开始到 \pm m 满足题意。如果不是的话,那么就让病毒沿着任意一方向延伸到头,随后在另一端加上剩余部分即可,复杂度为 O(1)。当然,本题甚至可以直接模拟 m 天,复杂度为 O(m)

注:本题我认为描述不严谨,并不是输出在 m 天中任意一个全被感染的段落,而是任意一个表示所有被感染的房子的段落。

代码如下:

#include<bits/stdc++.h>
using namespace std;
int t,n,m,k,l,r;
string s;
int main()
{
   cin>>t;
    while(t--)
    {
        cin>>n>>m>>l>>r;
        if(r>=m) cout<<0<<" "<<m<<endl;
        else if(l<=-m) cout<<-m<<" 0\n";
        else cout<<l<<" "<<m+l<<endl;
    }
   return 0;
}