站外题求解
  • 板块题目总版
  • 楼主lihaoda
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/6/29 09:42
  • 上次更新2024/6/29 13:10:04
查看原帖
站外题求解
1024914
lihaoda楼主2024/6/29 09:42

题目描述
现在各大oj上有n个比赛,每个比赛的开始、结束的时间点是知道的。

小A同学认为,参加越多的比赛,noip就能考的越好。

所以,他想知道他最多能参加几个比赛。

如果要参加一个比赛必须善始善终,而且不能同时参加2个及以上的比赛。

注意区间存在 ai=bi 的情况。此类区间持续时间为0,一定可选(当然也要保证与其它区间不冲突)。

输入格式 第一行是一个整数n,接下来n行每行是2个整数ai,bi( ai≤bi ),表示比赛开始、结束的时间。

输出格式 一个整数,为最多参加的比赛数目 (有那么亿点像凌乱的yyy) 本蒟蒻的代码

#include <bits/stdc++.h>

using namespace std;

struct node{
	long long b;
	long long e;
}a[1000007] = {{-1,-1}}; 

bool flag;
long long pos;

bool cmp(node x,node y){
	return x.e<y.e;
}

int main(){
	long long n;
	bool flag= 1;
	cin >> n;
	for(long long i=1;i<=n;++i){
		cin >> a[i].b >> a[i].e;
	}
	long long cnt = 0;
	sort(a+1,a+n+1,cmp);
	for(long long i = 1;i<=n;++i){
		if(a[i].b == a[i].e) {
			if(a[i].b>=pos){
				cnt++;
			}
			pos = a[i].e;
			continue;
		} 
		if(a[i].b>=pos){
			pos = a[i].e;
			cnt++;
		}
	}
	cout << cnt;
}
2024/6/29 09:42
加载中...