为啥只有10分???
查看原帖
为啥只有10分???
569795
MrCR7楼主2021/12/7 23:42
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>

int last[100003],s1[100003],s2[100003];
struct ch
{
    int ch1,ch2;
}a[100003];
struct in
{
    int in1,in2;
}b[100003];
bool cmp1(ch a,ch b)
{
    if(a.ch1==b.ch1) return a.ch2<b.ch2;
    return a.ch1<b.ch1;
}
bool cmp2(in a,in b)
{
    if(a.in1==b.in1) return a.in2<b.in2;
    return a.in1<b.in1;
}
int main ()
{
    //freopen("airport.in","r",stdin);
	//freopen("airport.out","w",stdout);
	int n,m1,m2;
	scanf("%d%d%d",&n,&m1,&m2);
	for(int i=1;i<=m1;i++)
	{
		scanf("%d%d",&a[i].ch1,&a[i].ch2);
	}
	for(int i=1;i<=m2;i++)
	{
		scanf("%d%d",&b[i].in1,&b[i].in2);
	}
	std::sort(a+1,a+m1+1,cmp1);
	std::sort(b+1,b+m2+1,cmp2);
	//printf("%d",0);
	for(int i=0,q=1;i<=n;i++,q++)
	{
	    if(i==0)
        {
            s1[q]=0;
            continue;
        }
		int j=0;
		if(i!=0)
		{
			j++;
			for(;j<=i;j++)
			{
				last[j]=a[j].ch2;
			}
		}
		if(i!=0) j--;
		//printf("%d ",j);
		int ans=j;
		std::sort(last+1,last+j+1);
		for(int k=j+1;k<=m1;k++)
		{
			if(a[k].ch1>=last[1])
			{
                last[1]=a[k].ch2;
				ans++;
			}
			std::sort(last+1,last+1+j);
		}
		s1[q]=ans;
		//printf("%d\n",ans);
	}
	for(int i=n,q=1;i>=0;i--,q++)
	{
	    if(i==0)
        {
            s2[q]=0;
            continue;
        }
		int j=0;
		if(i!=0)
		{
			j++;
			for(;j<=i;j++)
			{
				last[j]=b[j].in2;
			}
		}
		if(i!=0) j--;
		//printf("%d ",j);
		int ans=j;
		std::sort(last+1,last+j+1);
		for(int k=j+1;k<=m1;k++)
		{
			if(b[k].in1>=last[1])
			{
                last[1]=b[k].in2;
				ans++;
			}
			std::sort(last+1,last+1+j);
		}
		s2[q]=ans;
		//printf("%d\n",ans);
	}
	int max=0;
	for(int i=1;i<=(n+1);i++) if(s1[i]+s2[i]>max) max=s1[i]+s2[i];
	printf("%d\n",max);
	return 0;
}

2021/12/7 23:42
加载中...