1075.PAT Judge

【題意】
        給出一個PAT提交列表,輸出排名結果

【思路】
        此題細節稍多,難度不大,直接碼即可

【注意點】

        一開始我在處理最後要輸出的用戶列表時想省空間,於是在原vector裏刪除,結果有個點總是超時,改成scanf和printf還是不行。後來猜測可能是頻繁對vector進行刪除、每次都要挪動後面的元素導致的超時,於是另開了一個vector存放結果,果然AC了


#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

#define MAXIMUM 0x0fffffff

struct user{
	int uid;
	vector<int> scores;
	vector<bool> submited;
	int acCnt;//AC數
	int totalScore;
	bool flag;//提交過能通過編譯的代碼則爲true
	user():acCnt(0),totalScore(0),flag(0){};
};

bool cmp(user u1, user u2){
	if(u1.totalScore>u2.totalScore){
		return 1;
	}
	else if(u1.totalScore==u2.totalScore && u1.acCnt>u2.acCnt){
		return 1;
	}
	else if(u1.totalScore==u2.totalScore && u1.acCnt==u2.acCnt && u1.uid<u2.uid){
		return 1;
	}
	return 0;
}

int main(int argc, char const *argv[])
{
	int n,k,m;
	vector<int> fullScores;
	vector<user> users;

	scanf("%d%d%d", &n, &k, &m);
	users.resize(n);
	fullScores.resize(k);
	for(int i=0; i<n; i++){
		users[i].uid = i+1;
		users[i].scores.assign(k,0);
		users[i].submited.assign(k,0);
	}

	for(int i=0; i<k; i++){
		scanf("%d", &fullScores[i]);
	}

	for(int i=0; i<m; i++){
		int uid,pid,partialScore;
		
		scanf("%d%d%d", &uid, &pid, &partialScore);
		uid--;
		pid--;
		users[uid].submited[pid] = true;
		if(partialScore>=0){
			users[uid].flag = true;
			if(partialScore>users[uid].scores[pid]){
				users[uid].totalScore += partialScore-users[uid].scores[pid];
				users[uid].scores[pid] = partialScore;
				if(partialScore==fullScores[pid]){
					users[uid].acCnt++;
				}
			}
		}
	}
	
	vector<user> validUsers;

	for(int i=0; i<users.size(); i++){
		if(users[i].flag){
			validUsers.push_back(users[i]);
		}
	}
	
	sort(validUsers.begin(),validUsers.end(),cmp);

	int tmpScore = MAXIMUM,tmpRank = 0;
	for(int i=0; i<validUsers.size(); i++){
		if(validUsers[i].totalScore<tmpScore){
			tmpScore = validUsers[i].totalScore;
			tmpRank = i+1;
		}
		printf("%d %05d %d", tmpRank, validUsers[i].uid, validUsers[i].totalScore);
		for(int j=0; j<k; j++){
			if(!validUsers[i].submited[j]){
				printf(" -");
			}
			else{
				printf(" %d", validUsers[i].scores[j]);
			}
		}
		printf("\n");
	}

	system("pause");
	return 0;
}


發佈了99 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章