刷題記錄11

Roci發表於2020-11-19

連結:https://ac.nowcoder.com/acm/contest/950/A
來源:牛客網

設有個n活動的集合E={1,2,…,n},其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有一個活動能使用這一資源。每個活動i都有一個要求使用該資源的起始時間s_is i 和一個結束時間f_if i ,且s_i < f_isi<f i 。如果選擇了活動i,則它在時間區間 [ s_i , f_i )[s i ,f i )內佔用資源。若區間[ s_i , f_i )[s i ,f i )與區間[ s_j , f_j )[s j ,f j )不相交,則稱活動i與活動j是相容的。也就是說,當f_i \leq s_jf i ≤s j 或 f_j \leq s_if j ≤s i 時,活動i與活動j相容。選擇出由互相相容的活動組成的最大集合。
【程式碼】

#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 100;
struct node {  //結構體變數的宣告
	int s, t;
	bool operator<(const node &M) const {  //運用布林型別來判斷s是否小於t
		return t < M.t;
	}
} a[N];

int main() {
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> a[i].s >> a[i].t;  //輸入相應的aj和at
	sort(a + 1, a + 1 + n);
	int lst = a[1].t, cnt = 1;
	for (int i = 2; i <= n; i++) {
		if (a[i].s >=lst) {   //如果a[i].s>a[i].t,那麼cnt++
			cnt++;
			lst = a[i].t;
		}
	}
	cout << cnt << endl;
	return 0;
}完全

本題首先通過布林型別判斷輸入的每組資料中s是否小於t,然後運用for迴圈來進行每一組的s,t的比較,記錄相互相容的最大可能。