【水题】Codeforce 1282A Temporarily unavailable

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

一、题目大意

题目的意思就是,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;
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值