40pts求调 或 求正解
查看原帖
40pts求调 或 求正解
37770
升阳楼主2021/10/24 09:03

RT 考场40pts40pts代码

#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
const int N = 1e5 + 1;
struct _ {int a,b;};
int n,p,q;
_ A[N],B[N];
inline bool cmp(_&L,_&R){return L.a < R.a || (L.a == R.a && L.b < R.b);}
bool used[N];
int main()
{
	cin >> n >> p >> q;
	for(int i = 1;i <= p;i++)
		cin >> A[i].a >> A[i].b;
	for(int i = 1;i <= q;i++)
		cin >> B[i].a >> B[i].b;
	sort(A+1,A+p+1,cmp);
	sort(B+1,B+q+1,cmp);
	vector<int>AA,BB;
	AA.push_back(0);
	bool flag = false;
	while(!flag)
	{	flag = true;
		AA.push_back(AA.back());
		int prev = 0;
		for(int i = 1;i <= p;i++)
		{
			if(used[i]) continue;
			if(prev > A[i].a)
				flag = false;
			else
				++AA.back(),(prev = A[i].b),used[i] = true;
		}
	}
	memset(used,0x00,sizeof(used));
	BB.push_back(0);
	flag = false;
	while(!flag)
	{	flag = true;
		BB.push_back(BB.back());
		int prev = 0;
		for(int i = 1;i <= q;i++)
		{
			if(used[i]) continue;
			if(prev > B[i].a)
				flag = false;
			else
				++BB.back(),(prev = B[i].b),used[i] = true;
		}
	}
	int ans = 0;
	for(int r = 0;r <= n;r++)
	{
		int e = r >= AA.size() ? AA[AA.size() - 1] : AA[r];
		int f = n - r >= BB.size() ? BB[BB.size() - 1] : BB[n - r];
		ans = max(ans,e + f);
	}
	cout << ans;
}
2021/10/24 09:03
加载中...