Problem C: 区间交交

来源:互联网 发布:好的小清新女装淘宝店 编辑:程序博客网 时间:2024/03/29 18:39

Problem C: 区间交交

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 36  Solved: 11
[Submit][Status][Web Board]

Description

念奴娇·赤壁怀古

大江东去,

浪淘尽,

千古风流人物。

故垒西边,

人道是,

三国周郎赤壁。

乱石穿空,

惊涛拍岸,

卷起千堆雪。

江山如画,

一时多少豪杰。

遥想公瑾当年,

小乔初嫁了,

雄姿英发。

羽扇纶巾,

谈笑间,

樯橹灰飞烟灭。

故国神游,

多情应笑我,

早生华发。

人生如梦,

一尊还酹江月。

刘备今年终于进入浙江传媒学院了,想当年在高中的那场数学之战真是惊心动魄。为了能够顺利借到东风,诸葛亮将两组区间放在一起。将它们共同的部分提取出来,然后向上苍祷告。于是玉皇大帝就命令风神助卧龙一臂之力了。

如今,刘备问卧龙,曰:“军师,How long 你提取出的区间?”卧龙笑而不语,羽扇一扇便说,他的学生可以告诉刘备!你可以将这两组区间相交的部分在数轴上线段的长度告诉刘备么?

Input

数据只有两行代表当年诸葛亮用来提取的两组区间。每行的第一个自然数N (0<=N<100)表示该组区间的数量,接着N对小数si,ei表示区间的开始和结束。

Output

输出区间交集的长度输出来,结果保留三位小数。

Sample Input

2 1 10 14 173 3 7 9 15 16 18

Sample Output

7.000

HINT


Sample中的结果是这样求出的:(7-3) + (10-9) + (15-14) + (17-16) = 7

我感觉这一题毫无压力, 明显的结构体储存!
#include<stdio.h>#include<string.h>struct shuzu{    double b;//begin坐标    double e;//end坐标}sz[100];int main(){int n,m,i,j;double x,y,sum=0;scanf("%d",&n);for(i=0;i<n;i++){scanf("%lf%lf",&sz[i].b,&sz[i].e);}//把第一个区间的开始,结束坐标都储存起来!scanf("%d",&m);while(m--){        scanf("%lf%lf",&x,&y);//第二个再储存就可惜了,不要储存比较好!for(j=0;j<n;j++){    if(x>sz[j].b&&y<sz[j].e)//这个是第二个坐标夹在第一个坐标{sum+=y-x;}else if(x<sz[j].b&&y>sz[j].e)//这个是第一个坐标夹在第二个坐标{sum+=sz[j].e-sz[j].b;//以后判断都是第二个相对于第一个判断}else if(x>sz[j].b&&x<sz[j].e&&y>sz[j].e)//这个判断的是第二个坐标的开始坐标夹在区间里面,结束的坐标比第一个坐标的结束坐标大时!{sum+=sz[j].e-x;}else if(y>sz[j].b&&y<sz[j].e&&x<sz[j].b)//这个判断的是第二个坐标的结束坐标夹在区间里面,开始的坐标比第一个坐标的结束坐标大时!{sum+=y-sz[j].b;}}}printf("%.3lf\n",sum);}


0 0
原创粉丝点击