一、题目简介
二、实例代码
代码如下(示例):
#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
struct period{
long int start;
long int end;
};
int main(int argc, char** argv) {
int n;
cin>>n;
period a[4000];
for(int i=0;i<2*n;i++){
cin>>a[i].start>>a[i].end;
}
long int time = 0;
for(int i=0;i<n;i++){
for(int j=n;j<2*n;j++){
if(a[i].start>=a[j].start && a[i].end<=a[j].end){
time += a[i].end - a[i].start;
}else if(a[i].start<=a[j].start && a[i].end>=a[j].end){
time += a[j].end - a[j].start;
}else if(a[i].start>=a[j].start && a[i].end>=a[j].end && a[i].start<=a[j].end){
time += a[j].end - a[i].start;
}else if(a[i].start<=a[j].start && a[i].end<=a[j].end && a[i].end>=a[j].start){
time += a[i].end - a[j].start;
}
}
}
注意1个时间段可能会和对方多个时间段对应,例如[2,5]和[1,3][4,6]对应计算时间时,时间记为(3-2)+(5-4)=2,不能一个时间段和对方的一个时间段对应后直接break。
cout<<time;
return 0;
}