题目来源于CCF CSP
代码分析
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
vector<pair<int, int> >mp1;
vector<pair<int, int> > mp2;
int n;
cin >> n;
int m = n;
int start, end;
//第一个人时间
while (n--) {
cin >> start >> end;
mp1.push_back(pair<int, int>(start, end));
}
//第二个人时间
while (m--) {
cin >> start >> end;
mp2.push_back(pair<int, int>(start, end));
}
//计算时间重合度
auto iter1 = mp1.begin();
auto iter2 = mp2.begin();
int ans = 0;
while (iter1 != mp1.end() && iter2 != mp2.end() ) {
if ((*iter1).first < (*iter2).first) {
if ((*iter1).second > (*iter2).first && (*iter1).second < (*iter2).second) {
ans += (*iter1).second - (*iter2).first;
iter1++;
}
else if ((*iter1).second >= (*iter2).second) {
ans += (*iter2).second - (*iter2).first;
iter2++;
}
else {
iter1++;
}
}
else if ((*iter1).first >= (*iter2).first) {
if ((*iter2).second > (*iter1).first && (*iter1).second > (*iter2).second) {
ans += (*iter2).second - (*iter1).first;
iter2++;
}
else if ((*iter1).second <= (*iter2).second) {
ans += (*iter1).second - (*iter1).first;
iter1++;
}
else {
iter2++;
}
}
}
cout << ans;
return 0;
}
测试结果