PTA 7-15 PAT Judge (25 分)

#include 
using namespace std;
typedef struct{
	int id, flag = 0, cnt = 0, sum = 0;
	vector marks;
}stu;
//int cmp(stu a, stu b);
int cmp(int a, int b);
vector students(10005);
int main()
{
	#ifdef ONLINE_JUDGE
	#else
	freopen("in.txt", "r", stdin);
	#endif
	int N, K, M, rank = 0, last = -1;
	cin >> N >> K >> M;
	vector score(K+1);
	int i, j;
	for(i = 1; i <= K; i++){
		cin >> score[i];
	}
	//vector students(N + 1); //做了修改
	vector stuid(N + 1);
	for(i = 0; i <= N; i++){     //做了修改
		students[i].id = i;
		students[i].marks.resize(K + 1, -1); //做了修改
		stuid[i]=i+1;
	}

	for(i = 0; i < M; i++){
		int tmpid, tmp, tmpscore;
		cin >> tmpid >> tmp >> tmpscore;
		//scanf("%d%d%d",&tmpid,&tmp,&tmpscore);

		if(students[tmpid].marks[tmp] == -1){
			students[tmpid].marks[tmp] = 0;
		}
		if(tmpscore >= 0){
			students[tmpid].flag = 1;
		}
		if(tmpscore > students[tmpid].marks[tmp]){
			students[tmpid].sum += (tmpscore - students[tmpid].marks[tmp]);
			students[tmpid].marks[tmp] = tmpscore;

			if(tmpscore == score[tmp]){
				students[tmpid].cnt++;
			}
		}
	}

	//sort(students.begin(), students.end(), cmp);
	sort(stuid.begin(), stuid.end(), cmp);

	for(i = 0; i < N; i++){
		//if(students[i].flag == 0) break;
		if(students[stuid[i]].flag == 0) break;
		//if(last != students[i].sum)
		if(last != students[stuid[i]].sum){
			rank = i + 1;
			//last = students[i].sum;
			last = students[stuid[i]].sum;
		}

		//printf("%d %05d %d", rank, students[i].id, students[i].sum);
		printf("%d %05d %d", rank, students[stuid[i]].id, students[stuid[i]].sum);
		for(j = 1; j <= K; j++){
			//if(students[i].marks[j] == -1) cout << " -";
			if(students[stuid[i]].marks[j] == -1) cout << " -";
			//else cout << " " << students[i].marks[j];
			else cout << " " << students[stuid[i]].marks[j];
		}
		cout << endl;
	}

	return 0;
}

//int cmp(stu a, stu b)
int cmp(int a, int b)
{
	return students[a].flag != students[b].flag ? students[a].flag > students[b].flag : students[a].sum != students[b].sum ? students[a].sum > students[b].sum : students[a].cnt != students[b].cnt ? students[a].cnt > students[b].cnt : students[a].id < students[b].id;
}

你可能感兴趣的:(PTA)