女朋友提供的思路。
思路解析:
- 开一个数组h[1000010] = {0}, 根据前n行的输入,将数组对应位置1;比如,如果输入2 4,则将h[2]=1;h[3]=1; 表示2-3段为1,3-4段为1;
- 根据后n行的输入,与h[1000010]的对应位与1,将结果加到长度中;比如,第二次输入2 3,则sum+=(h[2]&1);
#include <stdio.h>
int n, h[1000010] = { 0 }, w[100010] = { 0 };
int a, b, c, d, sum = 0,max=0;
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d %d", &a, &b);
for (int j = a; j < b; j++)
h[j] = 1;
}
for (int i = 0; i < n; i++) {
scanf("%d %d", &c, &d);
for (int j = c; j < d; j++) {
sum += (h[j] & 1);
}
}
printf("%d", sum);
return 0;
}