1075 PAT Judge (25分)谁能告诉我最后一个测试点错哪谢人民币5元

这题要考虑的细节太多了,实不相瞒我做吐了,并不难,就是要考虑很多细节一遍遍调,,,
还没全通过,,最后一个测试点过不了,,太菜了

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

struct Stu {
	int id = 0;//为0是默认。
	int rank = 0;
	int getScore[6];//标号从1开始
	int fullScore = 0;
	int perfect = 0;//完整题数
	Stu() {
		//memset(getScore, -2, sizeof(getScore));//注意这里要考虑根本没做和做了0分和编译不通过-1三种情况。-2是没做
		for (int i = 0; i < 6; i++) {
			getScore[i] = -2;
		}
	}
};

bool mygreater(Stu s1, Stu s2) {
	if (s1.fullScore > s2.fullScore)return true;
	else if (s1.fullScore < s2.fullScore) return false;
	else {
		if (s1.perfect > s2.perfect) return true;
		else if (s1.perfect < s2.perfect) return false;
		else {
			if (s1.id < s2.id)return true;
			else return false;
		}
	}
}

int main() {
	int N, K, M;//N用户数 K总题目数 M提交数
	int tid, tq, tscore;//每个提交的用户id,题目号,得分
	cin >> N >> K >> M;
	Stu stuList[10005];
	int score[6];
	//题目总分
	for (int i = 1; i <= K; i++) {
		int st = 0;
		cin >> st;
		score[i] = st;
	}

	for (int i = 0; i < M; i++) {
		cin >> tid >> tq >> tscore;//tid从1开始
		stuList[tid].id = tid;
		//取较高的分数
		//有提交记录要么是-1 要么0 要么得分
		int temp = stuList[tid].getScore[tq];
		if (temp < tscore) {
			stuList[tid].getScore[tq] = tscore;
		}
	}

	for (int i = 1; i <= N; i++) {
		//计算总分
		for (int j = 1; j <= K; j++) {//这里注意如果是-2代表没做 -1代表编译未通过 都要跳过
			int ts = stuList[i].getScore[j];
			if (ts == -1 || ts==-2) continue;
			stuList[i].fullScore += ts;
		}
		//计算完美解决数
		for (int j = 1; j <= K; j++) {
			if (stuList[i].getScore[j] == score[j])
				stuList[i].perfect++;
		}
	}
	//排序
	sort(stuList + 1, stuList + N + 1, mygreater);
	//输出
	for (int i = 1; i <= N; i++) {
		//这里注意 如果所有得分要么是-2(没做)要么是-1(编译未通过)不打印
        int noSub = 1;
		for (int n = 1; n <= K; n++) {
			if (stuList[i].getScore[n] != -2 && stuList[i].getScore[n] != -1) {
				noSub = 0;
				break;
			}
		}
		if (noSub == 1)continue;
		//计算排名
		int temprank = 1;
		if (i != 1) {
			if (stuList[i].fullScore == stuList[i - 1].fullScore) {
				temprank = stuList[i - 1].rank;
			}
			else
				temprank = i;
		}
		stuList[i].rank = temprank;
		cout << stuList[i].rank << ' ' << setw(5) << setfill('0') << stuList[i].id << ' ' << stuList[i].fullScore;
		for (int j = 1; j <= K; j++) {
			if (stuList[i].getScore[j] == -2) cout << " " << "-";
			else if (stuList[i].getScore[j] == -1) cout << " " << 0;
			else cout << " " << stuList[i].getScore[j];
		}
		if (i != N) cout << endl;

	}
}

猜你喜欢

转载自blog.csdn.net/weixin_42189888/article/details/106323646