YL 模拟赛总结 15

Problem


T1

感觉是最难的。

考虑贪心。

首先对牛的按左端点进行排序,然后对于每只鸡去考虑匹配哪头牛。

具体地,开一个小根堆,然后对于每只鸡 \(t_i\),将 \(a_i \le t_i\) 的牛放入堆中,此时堆中存放的是候选的牛。

然后对于堆中的牛,将 \(b_i<t_i\) 的牛弹出。

此时堆中的牛均是合法的,累加堆的大小即可。

#include<bits/stdc++.h>
using namespace std;
int c,n,ans;
int t[20031];
struct node{
int x,y;
friend bool operator < (node a,node b){
return a.y>b.y;
}
}a[20031];
priority_queue<node> pq;
bool cmp(node a,node b){
return a.x<b.x;
}
int main(){
cin>>c>>n;
for(int i=1;i<=c;i++) cin>>t[i];
for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;
sort(t+1,t+c+1),sort(a+1,a+n+1,cmp);
for(int i=1,now=1;i<=c;i++){
while(now<=n&&a[now].x<=t[i]) pq.push(a[now++]);
while(!pq.empty()&&pq.top().y<t[i]) pq.pop();
if(!pq.empty()) ans++,pq.pop();
}
cout<<ans;
return 0;
}

T2

略。

T3

略。

T4

略。

posted @   _XOFqwq  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示