《信息学奥赛一本通—提高篇》-活动安排 -题解

本题题意如题面所示;

主要思路就是运用贪心思想,用结构体存信息,然后按开始时间,结束时间排序,从第一个活动开始,不断将下一个时间来进行比较,如果下一个时间的左值比当前的右值要大,直接加1,然后将当前时间替换为下一个;如果下一个时间的右值比当前的右值要小,就将当前的时间替换为下一个,如此重复,直到结束。

下面是代码展示
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
const int INF=0x3f3f3f3f;

ll a[maxn];
struct Node{
int l,r;
}node[maxn];
int cmp(Node a,Node b){
if(a.l==b.l) return a.r<b.r;///排序规则
else return a.l<b.l;
}
int main()
{
int n;
cin >> n ;
for(int i=0;i<n;i++) cin >> node[i].l >> node[i].r;
sort(node,node+n,cmp);
int ans=1;
int l=node[0].l,r=node[0].r;
for(int i=1;i<n;i++){
if(node[i].l>=r){
ans++;
l=node[i].l;
r=node[i].r;
}
else if(node[i].r<=r){
l=node[i].l;
r=node[i].r;
}
}
cout << ans << endl;
return 0;
}

全部评论
同学你的代码可以用Markdown编排哦,会更美观的~
点赞 回复 分享
发布于 2019-08-22 14:25

相关推荐

提醒喝水小助手:简历太乱了,哪有简历能写三页的啊,先把间距缩小一点,然后项目建议分行写,时间题目职责一行,然后每个技术点一行,重点加粗,看起来也比这样直接一段话好看
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务