【水题】Codeforce 1282A Temporarily unavailable

末鹿安然 提交于 2019-12-27 12:28:08

咸鱼了一个多月了,继续把题刷起来!

一、题目大意

题目的意思就是,Polycarp在Ox轴上运动,同时在Ox轴上设有基站,基站的覆盖范围是半径r,给定Polycarp运动的区间[a, b],以及基站的位置c和作用半径r,Polycarp每分钟运动一个单位长度,求在Polycarp运动的这个过程中,没有被基站覆盖的时间是多少?

二、题目思路以及AC代码

这题也就是一个简单的实现题,根本就是让你求一个区间的交集。比较简单,就直接上代码了。

#include <iostream>
using namespace std;

typedef long long ll;

// 交换x, y
void swap(int& x, int& y) {
    int temp = x;
    x = y;
    y = temp;
}

// 获取两个区间的交集
int GetCross(int x1, int y1, int x2, int y2) {
    if (x1 > y1) swap(x1, y1);
    if (x2 > y2) swap(x2, y2);

    // 无交叉
    if (x1 >= y2 || x2 >= y1) return 0;

    // 计算交叉
    int x_cross = x1>x2?x1:x2;
    int y_cross = y1>y2?y2:y1;

    return y_cross - x_cross;
}

// 得到区间长度
int GetSectionLen(int x, int y) {
    return abs(y - x);
}

int main() {

    int T;
    cin >> T;
    while (T--) {
        int a, b, c, r;
        cin >> a >> b >> c >> r;
        
        int len = GetSectionLen(a, b);
        if (len == 0) {
            cout << 0 << endl;
            continue;
        }

        // 计算cross
        cout << len - GetCross(a, b, c - r, c + r) << endl;
    }

    return 0;
}

如果有问题,欢迎大家指正!!!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!