题目:
桌子上零散地放着若干个盒子,桌子的后方是一堵墙。如右图所示。现在从桌子的前方射来一束平行光, 把盒子的影子投射到了墙上。问影子的总宽度是多少?
思路:
直接n2n^2n2暴力+离散
CodeCodeCode:
#include<cstdio>
#include<algorithm>
using namespace std;
long long kd,sl,ans,k;
long long a[100001],b[100001][5];
int main ()
{
scanf("%lld",&kd);
scanf("%lld",&sl);
for(int i = 1; i <= sl; ++i)
{
scanf("%lld%lld",&b[i][1],&b[i][2]);
a[++k] = b[i][1];//记录左右端点
a[++k] = b[i][2];
}
sort (a + 1, a + 1 + k);//先排个序,方便离散
for ( int i = 1; i <= k; ++i)
for ( int j = 1; j <= sl; ++j)
if(a[i] > b[j][1] && a[i] <= b[j][2])//离散
{
ans+=a[i]-a[i-1];//累加答案
break;//避免多次计算
}
printf("%lld",ans);//输出
return 0;
}