问题分析:从题目中具体的场景中抽象出本质,其实就是求相交长度,求两个数的最大值或者最小值可以直接用头文件algorithm里面的max()和min()。
代码如下
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 2000 + 10;
int a[N], b[N], c[N], d[N];
int main()
{
int n, t, ans = 0;
scanf("%d", &n);
for(int i = 0; i < n; i ++)
{
scanf("%d%d", &a[i], &b[i]);
}
for(int i = 0; i < n; i ++)
{
scanf("%d%d", &c[i], &d[i]);
}
for(int i = 0; i < n; i ++)
{
for(int j = 0; j < n; j ++)
{
t = min(b[i], d[j]) - max(a[i], c[j]);
ans += max(0, t);//t小于0说明没有相交
}
}
printf("%d\n", ans);
return 0;
}