CSP-S 2021 廊桥分配 题解
part 1:
题目描述:
当一架飞机抵达机场时,可以停靠在航站楼旁的廊桥,也可以停靠在位于机场边缘的远机位。乘客一般更期待停靠在廊桥,因为这样省去了坐摆渡车前往航站楼的周折。然而,因为廊桥的数量有限,所以这样的愿望不总是能实现。
机场分为国内区和国际区,国内航班飞机只能停靠在国内区,国际航班飞机只能停靠在国际区。一部分廊桥属于国内区,其余的廊桥属于国际区。
L 市新建了一座机场,一共有
现给定未来一段时间飞机的抵达、离开时刻,请你负责将
输入格式
输入的第一行,包含三个正整数
接下来
接下来
每行的多个整数由空格分隔。
输出格式
输出一个正整数,表示能够停靠廊桥的飞机数量的最大值。
样例输入 #1
3 5 4 1 5 3 8 6 10 9 14 13 18 2 11 4 15 7 17 12 16
样例输出 #1
7
样例输入 #2
2 4 6 20 30 40 50 21 22 41 42 1 19 2 18 3 4 5 6 7 8 9 10
样例输出 #2
4
part 2
解析:
首先得以想到的是枚举所有可能,选择最优方案,这样的话时间复杂度约为
不妨这样想,一共有
参考代码
#include<bits/stdc++.h> #define bool char //防盗水印 using namespace std; const int N = 1e6+5; int n,m1,m2,f[N]={0},g[N]={0}; struct edge { int be,en; }a[N],b[N]; struct node { int num,leave_t; node(){} node(int numm,int lea){num=numm;leave_t=lea;} bool operator < (const node& r) const { return leave_t>r.leave_t; } }; bool cmp(edge x,edge y){return x.be<y.be;} int main() { scanf("%d%d%d",&n,&m1,&m2); for(int i = 1;i<=m1;i++) scanf("%d%d",&a[i].be,&a[i].en); for(int i = 1;i<=m2;i++) scanf("%d%d",&b[i].be,&b[i].en); sort(a+1,a+1+m1,cmp); sort(b+1,b+1+m2,cmp); priority_queue<int, vector<int> ,greater<int> > p; //存放空余的廊桥 priority_queue<node> pq; //存放停在廊桥飞机的廊桥编号和离开时间 for(int i = 1;i<=n;i++) p.push(i); //初始所有廊桥均为空闲状态 for(int i = 1;i<=m1;i++) { while(!pq.empty()&&a[i].be>pq.top().leave_t){ p.push(pq.top().num); pq.pop(); } if(!p.empty()) { pq.push(node(p.top(),a[i].en)); f[p.top()]++; p.pop(); } } while(!p.empty()) p.pop(); //清空队列,优先队列不支持 clear() while(!pq.empty()) pq.pop(); for(int i = 1;i<=n;i++) p.push(i); for(int i = 1;i<=m2;i++) { while(!pq.empty()&&b[i].be>pq.top().leave_t){ p.push(pq.top().num); pq.pop(); } if(!p.empty()) { pq.push(node(p.top(),b[i].en)); g[p.top()]++; p.pop(); } } for(int i = 2;i<=n/*千万别写成m1*/;i++) f[i]=f[i]+f[i-1]; for(int i = 2;i<=n/*千万别写成m2*/;i++) g[i]=g[i]+g[i-1]; int ans=0; for(int i = 0;i<=n;i++) ans=max(ans,f[i]+g[n-i]); printf("%d",ans); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)