警示后人——数据输入排序
查看原帖
警示后人——数据输入排序
94944
Isia_forever楼主2021/10/24 13:25

(如果和我的做法一样的话)本题目需要在数据输入时进行排序,使每一个航班的到达时刻信息升序排列,否则0 Pts。 附上代码(AC)

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

int SA[100005], SB[100005], T[100005], N, M1, M2, Ans;
struct node{
	int A;
	int B;
}Val[100005];

bool operator < (node A, node B) {
	return A.A < B.A;
}

int main() {
	ios::sync_with_stdio(0);
	cin >> N >> M1 >> M2;
	for (int i = 0; i < M1; i++) {
		cin >> Val[i].A >> Val[i].B;
	}
	sort(Val, Val + M1);
	for (int i = 0; i < M1; i++) {
		for (int j = 1; j <= N; j++) {
			if (T[j] < Val[i].A) {
				T[j] = Val[i].B;
				SA[j]++;
				j = N + 1;
			}
		}
	}
	memset(T, 0, sizeof(T));
	for (int i = 0; i < M2; i++) {
		cin >> Val[i].A >> Val[i].B;
	}
	sort(Val, Val + M2);
	for (int i = 0; i < M2; i++) {
		for (int j = 1; j <= N; j++) {
			if (T[j] < Val[i].A) {
				T[j] = Val[i].B;
				SB[j]++;
				j = N + 1;
			}
		}
	}
	for (int j = 1; j <= N; j++) {
		SA[j] = SA[j - 1] + SA[j];
	}
	for (int j = 1; j <= N; j++) {
		SB[j] = SB[j - 1] + SB[j];
	}
	for (int i = 0; i <= N; i++) {
		Ans = max(SA[i] + SB[N - i], Ans);
	}
	cout << Ans;
	return 0;
}
2021/10/24 13:25
加载中...