在数轴上n条线段的重叠长度计算

在数轴上n条线段的重叠长度计算

解法思路:

  1. 初始化区间:假设初始的重叠区间是整个数轴的范围(或者直接以第一条线段作为初始区间)。
  2. 遍历所有线段:
    不断缩小重叠区间的左右边界:
    左边界取 最大值:\(left = max(left, 当前线段左端点)\)
    右边界取 最小值:\(right = min(right, 当前线段右端点)\)
  3. 计算结果:
    如果最终 \(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();
	}
}
posted @ 2025-03-12 16:54  古明地恋想睡觉  阅读(169)  评论(0)    收藏  举报