3323 - 区间交交
时间限制 : 1 秒
内存限制 : 128 MB
<span><span><span><b>念奴娇</b></span></span><span><span><b>·</b></span></span><span><span><b>赤壁怀古</b></span></span></span>
<span><b>大江东去</b></span><span><span><span><b>,</b></span></span></span>
<span><b>浪淘尽,</b></span>
<span><b>千古风流人物。</b></span>
<span><b>故垒西边,</b></span>
<span><b>人道是,</b></span>
<span><b>三国周郎赤壁。</b></span>
<span><b>乱石穿空,</b></span>
<span><b>惊涛拍岸,</b></span>
<span><b>卷起千堆雪。</b></span>
<span><b>江山如画,</b></span>
<span><b>一时多少豪杰。</b></span>
<span><b>遥想公瑾当年,</b></span>
<span><b>小乔初嫁了,</b></span>
<span><b>雄姿英发。</b></span>
<span><b>羽扇纶巾,</b></span>
<span><b>谈笑间,</b></span>
<span><b>樯橹灰飞烟灭。</b></span>
<span><b>故国神游,</b></span>
<span><b>多情应笑我,</b></span>
<span><b>早生华发。</b></span>
<span><b>人生如梦,</b></span>
<span><b>一尊还酹江月。</b></span>
<span></span>刘备今年终于进入浙江传媒学院了,想当年在高中的那场数学之战真是惊心动魄。为了能够顺利借到东风,诸葛亮将两组区间放在一起。将它们共同的部分提取出来,然后向上苍祷告。于是玉皇大帝就命令风神助卧龙一臂之力了。
<span></span>如今,刘备问卧龙,曰:“军师,<span>How long </span>你提取出的区间?”卧龙笑而不语,羽扇一扇便说,他的学生可以告诉刘备!你可以将这两组区间相交的部分在数轴上线段的长度告诉刘备么?
题目输入
数据只有两行代表当年诸葛亮用来提取的两组区间。每行的第一个自然数<span>N (0<=N<100)</span>表示该组区间的数量,接着<span>N</span>对小数<span>si,ei</span>表示区间的开始和结束。
题目输出
输出区间交集的长度输出来,结果保留三位小数。
输入/输出样例
输入格式
2 1 10 14 17 3 3 7 9 15 16 18
输出格式
7.000
C++解答
#include<iostream> #include<cstdio> using namespace std; struct Region { double s, e; }r1[101], r2[101]; double min(double a, double b) { return a < b ? a : b; } double max(double a, double b) { return a > b ? a : b; } double cal(Region a, Region b) { // a是靠前的区间 double dif; char first; if (a.e < b.e) dif = a.e - max(a.s, b.s), first = 'a'; else dif = b.e - max(a.s, b.s), first = 'b'; if (dif > 0) { if (first == 'a') a.s = a.e, b.s = b.e; else a.s = b.e, b.s = b.e; return dif; } else return 0; } int main() { int n1, n2; while (cin >> n1) { for (int i = 0; i < n1; i++) cin >> r1[i].s >> r1[i].e; cin >> n2; for (int i = 0; i < n2; i++) cin >> r2[i].s >> r2[i].e; double ans = 0; for (int i = 0; i < n1; i++) for (int j = 0; j < n2; j++) { if (r1[i].s < r2[j].s) ans += cal(r1[i], r2[j]); else ans += cal(r2[j], r1[i]); } printf("%.3lf\n", ans); } return 0; }