65分求助巨佬
查看原帖
65分求助巨佬
763575
MengyuChihiro楼主2022/10/26 13:44
# include <algorithm>
# include <iostream>
using namespace std;
int cnt1[100001],cnt2[100001];//存处理结果
int ans[100001];//存放预处理廊桥使用情况
int ans2[100001];
struct mm
{
    int down;
    int fly;
}m[100001];
bool cmp(mm a,mm b)
{return a.down<b.down;
}
int main(void)
{
    int n,m1,m2;
    cin>>n>>m1>>m2;
    int len=m1+m2;
    for(int i=1;i<=len;i++)
        scanf("%d%d",&m[i].down,&m[i].fly);
    sort(m,m+m1,cmp);//进行降落时间排序
    sort(m+m1+1,m+len,cmp);
    //枚举所有飞机使用所有廊桥的情况
    //优先使用较近的
    for(int i=1;i<=m1;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(m[i].down>=ans[j])
            {
                cnt1[j]++;
                ans[j]=m[i].fly;
                break;
            }
        }
    }
    for(int i=m1+1;i<=len;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(m[i].down>=ans2[j])
            {
                cnt2[j]++;
                ans2[j]=m[i].fly;
                break;
            }
        }
    }
    for(int i=1;i<=n;i++)//前缀和
    {
        cnt1[i]+=cnt1[i-1];
        cnt2[i]+=cnt2[i-1];
    }
    int max=0;
    for(int i=0;i<=n;i++)
    {
        int k=cnt1[i]+cnt2[n-i];
        if(k>max)
            max=k;
    }
    cout<<max<<endl;
}
2022/10/26 13:44
加载中...