L i n k Link Link
D e s c r i p t i o n Description Description
桌子上零散地放着若干个盒子,桌子的后方是一堵墙。如右图所示。现在从桌子的前方射来一束平行光, 把盒子的影子投射到了墙上。问影子的总宽度是多少?
S a m p l e Sample Sample I n p u t Input Input
20 //桌面总宽度
4 //盒子数量
1 5
3 8
7 10
13 19
S a m p l e Sample Sample O u t p u t Output Output
15
H i n t Hint Hint
数据范围
1<=n<=100000,1<=m<=100000,保证坐标范围为[1,n].
T r a i n Train Train o f of of T h o u g h t Thought Thought
离散化~~~~
C o d e Code Code
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int L, M, k, a[200005], ans;
struct line
{
int start, end;
}b[100005];
int main()
{
int x, y;
scanf("%d%d", &L, &M);
for (int i = 1; i <= M; ++i) {
scanf("%d%d", &x, &y);
a[++k] = x; a[++k] = y;
b[i].start = x; b[i].end = y;
}//读入
sort(a + 1, a + k + 1);//排个序
for (int i = 1; i <= k; ++i)
for (int j = 1; j <= M; ++j)
{
if (a[i] > b[j].start && a[i] <= b[j].end)//是否在范围内
{
ans += a[i] - a[i - 1];
break;
}
}
printf("%d", ans);
return 0;
}