在数轴上n条线段的重叠长度计算
解法思路:
- 初始化区间:假设初始的重叠区间是整个数轴的范围(或者直接以第一条线段作为初始区间)。
- 遍历所有线段:
不断缩小重叠区间的左右边界:
左边界取 最大值:\(left = max(left, 当前线段左端点)\)
右边界取 最小值:\(right = min(right, 当前线段右端点)\)
- 计算结果:
如果最终 \(left < right\),说明有重叠部分,长度为 \(right - left\)
如果 \(left >= right\),说明没有交集,长度为 \(0\)
示例代码
#include <bits/stdc++.h>
#define LL long long
#define ULL unsigned long long
using namespace std;
int pl[100];
int pr[100];
void solve(){
int n;
cin >> n;
for(int i=0;i<n;i++){
cin >> pl[i] >> pr[i];
}
int l = pl[0], r = pr[0];
for(int i=1;i<n;i++){
l = max(l,pl[i]);
r = min(r,pr[i]);
}
cout << max(r-l,0) << endl;
}
int main(){
int t = 1;
// cin >> t;
while(t--){
solve();
}
}