区间交交 (我觉得题目没说清)
作者:互联网
区间交交
Description
刘备今年终于进入浙江传媒学院了,想当年在高中的那场数学之战真是惊心动魄。为了能够顺利借到东风,诸葛亮将两组区间放在一起。将它们共同的部分提取出来,然后向上苍祷告。于是玉皇大帝就命令风神助卧龙一臂之力了。
如今,刘备问卧龙,曰:“军师,How long 你提取出的区间?”卧龙笑而不语,羽扇一扇便说,他的学生可以告诉刘备!你可以将这两组区间相交的部分在数轴上线段的长度告诉刘备么?
Input
数据只有两行代表当年诸葛亮用来提取的两组区间。每行的第一个自然数N (0<=N<100)表示该组区间的数量,接着N对小数si,ei表示区间的开始和结束。
Output
输出区间交集的长度输出来,结果保留三位小数。
Samples
input Copy 2 1 10 14 17 3 3 7 9 15 16 18 output Copy 7.000Hint
Sample中的结果是这样求出的:(7-3) + (10-9) + (15-14) + (17-16) = 7。
#include <stdio.h>
typedef struct{
double a;
double b;
}list;
list w[110];
int main()
{
int n;
scanf("%d",&n);
int i;
for(i=0;i<n;i++)
{
scanf("%lf %lf",&w[i].a,&w[i].b);
}
int m;
double x,y;
scanf("%d",&m);
double sum=0;
while(m--)
{
scanf("%lf %lf",&x,&y);
for(i=0;i<n;i++)
{
if(w[i].a<=x&&y<=w[i].b)
sum+=y-x;
else if(w[i].a<=x&&w[i].b<=y&&x<=w[i].b)
sum+=w[i].b-x;
else if(x<=w[i].a&&y<=w[i].b&&w[i].a<=y)
sum+=y-w[i].a;
else if(x<=w[i].a&&y>=w[i].b)
sum+=w[i].b-w[i].a;
}
}
printf("%.3lf\n",sum);
return 0;
}
就是以上一个区间一个个遍历过去,一共四种情况,但我想吐槽的是如果输入的区间就有交集,那上面这个方法就是错的,从的来说题目没说清,还是说默认区间就是给定的数据就是不可能相交的,加油。
标签:题目,int,交交,刘备,卧龙,没说,区间,两组 来源: https://blog.csdn.net/qq_63010655/article/details/122381506