三样例全过,洛谷爆零???
查看原帖
三样例全过,洛谷爆零???
51234
s5_gan楼主2021/10/27 19:13

本来想着好歹暴力拿个40分进noip,爆零属实不理解

#include<bits/stdc++.h>
using namespace std;
const int Max_n=100005,INF=0x7fffffff;

int n,m1,m2,ans,f[Max_n],sum1[Max_n],sum2[Max_n],m;
struct node
{
	int t1,t2;
}a[Max_n],b[Max_n];

bool cmp(node a,node b)
{
	return a.t1<b.t1;
}
void solve(int x,int t)
{
	f[x]=t;
	for(int i=x;i<=m;i++){
		if(a[i].t1>a[x].t2&&f[i]==0){
			solve(i,t);
			break;
		}
		if(i==m)break;
	}
}
int main()
{
	freopen("airport.in","r",stdin);freopen("airport.out","w",stdout);
	cin>>n>>m1>>m2;
	for(int i=1;i<=m1;i++){
		cin>>a[i].t1>>a[i].t2;
	}sort(a+1,a+1+m1,cmp);
	for(int i=1;i<=m2;i++){
		cin>>b[i].t1>>b[i].t2;
	}sort(b+1,b+1+m2,cmp);
	m=m1;
	for(int i=1,p=1;i<=m1;i++){
		if(f[i]>0)continue;
		solve(i,p);
		p++;
	}
	for(int i=1;i<=m1;i++){
		sum1[f[i]]++;
		f[i]=0;
	}
	m=m2;
	for(int i=1,p=1;i<=m2;i++){
		if(f[i]>0)continue;
		solve(i,p);
		p++;
	}
	for(int i=1;i<=m2;i++){
		sum2[f[i]]++;
		f[i]=0;
	}
	for(int i=0;i<=n;i++){
		sum1[i]+=sum1[i-1];
		sum2[i]+=sum2[i-1];
		//cout<<sum1[i]<<" "<<sum2[i]<<endl;
	}
	for(int i=0;i<=n;i++){
		ans=max(ans,sum1[i]+sum2[n-i]);
	}
	cout<<ans;
	return 0;
}
2021/10/27 19:13
加载中...