PAT甲级 1075(C++)

注意这句话:For those who has never submitted any solution that can pass the compiler, or has never submitted any solution, they must NOT be shown on the ranklist.

意思是   提交都没通过编译   和   没提交任何题目   的人不出现在排名表中,因此不能仅通过总分是否为0来判断(可能有人通过编译了但答案一个都不正确,总分为0

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct person {
	int id;
	int rank;
	int score;
	int perfect;
	int part[5];
	bool show;
};
vector<person>info;
int full[5];
bool compare(person p1, person p2) {
	if (p1.score != p2.score) return p1.score > p2.score;
	if (p1.perfect != p2.perfect) return p1.perfect > p2.perfect;
	if (p1.id != p2.id) return p1.id < p2.id;
}
int main() {
	int N, K, M;
	cin >> N >> K >> M;
	info.resize(N);
	for (int i = 0; i < N; i++) {
		info[i].id = i + 1;
		info[i].score = info[i].perfect = 0;
		fill(info[i].part, info[i].part + K, -1);
		info[i].show = 0;
	}
	for (int i = 0; i < K; i++)
		cin >> full[i];
	for (int i = 1; i <= M; i++) {
		int d, p, s;
		scanf("%05d %d %d", &d, &p, &s);
		if (s < info[d - 1].part[p - 1]) continue;
		info[d - 1].part[p - 1] = (s==-1)?0:s;
		if (info[d - 1].show == 0 && s != -1) info[d - 1].show = 1;
	}
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < K; j++) {
			info[i].score += (info[i].part[j]==-1)?0:info[i].part[j];
			if (info[i].part[j] == full[j])
				info[i].perfect++;
		}
	}
	sort(info.begin(), info.end(), compare);
	for (int i = 0; i < N; i++) {
		if (info[i].show==0) continue;
		if (i == 0) info[i].rank = 1;
		else if (info[i].score == info[i - 1].score)
			info[i].rank = info[i - 1].rank;
		else info[i].rank = i + 1;
		printf("%d %05d %d ", info[i].rank, info[i].id, info[i].score);
		for (int j = 0; j < K; j++) {
			if (info[i].part[j] == -1) cout << "-";
			else cout << info[i].part[j];
			if (j != K - 1) cout << " ";
			else cout << endl;
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45681165/article/details/121087495