A和B是好友,他们经常在空闲时间聊天,A的空闲时间为[a1 ,b1 ],[a2 ,b2 ]..[ap ,bp ]。B的空闲时间是[c1 +t,d1 +t]..[cq +t,dq +t],这里t为B的起床时间。这些时间包括了边界点。B的起床时间为[l,r]的一个时刻。若一个起床时间能使两人在任意时刻聊天,那么这个时间就是合适的,问有多少个合适的起床时间?

// ConsoleApplication5.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<vector>
#include<iostream>
#include<string>
#include <stack>
#include<algorithm>
using namespace std;

bool compVec(vector<int> vec1, vector<int> vec2 )
{
	bool flag = false;
	for (int i = 0; i < vec1.size();i++)
	{
		
		for (int j = 0; j < vec2.size(); j++)
		{
			if (vec1[i] == vec2[j])
			{
				flag = true;
				break;
			}
		}
		if (flag == true)
		{
			break;
		}
	}
	//cout << "执行了" << endl;
	return flag;
}

int main()
{
	int p,q,l,r;
	while (cin >> p>>q>>l>>r)
	{
		vector<int> vec1;
		vector<int> vec2;
		int num = 0;
		for (int i = 0; i < p; i++)
		{
			int a, b;
			cin >> a >> b;
			for (int j = a; j <= b; j++)
			{
				vec1.push_back(j);
			}
		}

		for (int i = 0; i < q; i++)
		{
			int a, b;
			cin >> a >> b;
			for (int j = a ; j <= b ; j++)
			{
				vec2.push_back(j);
			}
		}

		
		for (int k = l; k <= r; k++)
		{

			for (int i = 0; i < vec2.size(); i++)
			{
				vec2[i] = vec2[i] + k;
			}
			
			if (compVec(vec1, vec2) == true)
			{
				num++;
			}
			for (int i = 0; i < vec2.size(); i++)
			{
				vec2[i] = vec2[i] - k;
			}
		
		}
		
		cout << num << endl;


	}

	

return 0;
}
原文地址:https://www.cnblogs.com/wdan2016/p/6515670.html