CF1282A 题解

洛谷链接&CF 链接

1|0题目简述

共有 T 组数据。

有一条数轴,要从 a 点跑到 b 点,在 c 点的地方有网络,覆盖区间为 [cr,c+r],问在多少时间没有网络覆盖。

2|0思路

分类讨论:

  1. c+racrb,表示区间 [a,b] 内都没有网络,直接输出 ba

  2. c+rbcra,表示区间 [cr,b] 区间有网络,输出 cra

  3. crac+rb,表示区间 [a,c+r] 有网络,输出 bcr

  4. c+rbcra,表示区间 [a,b] 内都有网络,输出 0 即可。

  5. c+rbcra,表示区间 [c1,c+r] 有网络,正常输出 ba2×r 即可。

那么代码就很好实现了:

#include<iostream> using namespace std; int T, a, b, c, r; int main(){ cin >> T; while(T --) { cin >> a >> b >> c >> r; if(a > b) swap(a, b); // 保证 a <= b if(c + r <= a || c - r >= b) cout << b - a << endl; // 情况 1 else if(c + r >= b && c - r >= a) cout << c - r - a << endl; // 情况 2 else if(c - r <= a && c + r <= b) cout << b - c - r << endl; // 情况 3 else if(c + r >= b && c - r <= a) cout << 0 << endl; // 情况 4 else cout << b - a - 2 * r << endl; // 情况 5 } return 0; }

提交记录

The End!


__EOF__

本文作者So_noSlack
本文链接https://www.cnblogs.com/So-noSlack/p/17601075.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   So_noSlack  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示