CCF CSP 201809-2买菜

题目来源于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;
}

测试结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44116998/article/details/108287760