1. 程式人生 > >1025 PAT Ranking (25 分)

1025 PAT Ranking (25 分)

1025 PAT Ranking (25 分)

傳送門

#include <bits/stdc++.h> 
using namespace std;
struct node {
	string id;
	int grade;
	int local_rank;
	int final_rank;
	int local_number;
};
bool cmp(node a, node b){
	if (a.grade!=b.grade)
		return a.grade > b.grade;
	else 
		return a.id<b.id;
}
int main
() { //freopen("datain.txt","r",stdin); int n, k, m=0; cin>>n; vector<node> list; for (int j = 0; j < n; j++) { cin>>k; struct node a; vector<node> temp; for (int i = 0; i < k; i++) { cin>>a.id>>a.grade; m++; a.local_number = j+1; temp.
push_back(a); } sort(temp.begin(),temp.end(),cmp); temp[0].local_rank = 1; int t = 1; list.push_back(temp[0]); for (int i = 1; i < k; i++) { if (temp[i].grade==temp[i-1].grade) { temp[i].local_rank = temp[i-1].local_rank; t++; } else { t++; temp[i].local_rank = t;
} list.push_back(temp[i]); } } sort(list.begin(),list.end(),cmp); int t = 1; list[0].final_rank = 1; printf("%d\n",m); //printf("%s %d %d %d\n",(list[0].id).c_str(),list[0].final_rank,list[0].local_number,list[0].local_rank); for (int i = 1; i < m; i++) { if (list[i].grade==list[i-1].grade) { list[i].final_rank = list[i-1].final_rank; t++; } else { t++; list[i].final_rank = t; } // printf("%s %d %d %d\n",(list[i].id).c_str(),list[i].final_rank,list[i].local_number,list[i].local_rank); } for (auto it : list) { cout<<it.id<<" "<<it.final_rank<<" "<<it.local_number<<" "<<it.local_rank<<endl; } return 0; }