PAT 1012 The Best Rank
题目链接http://pat.zju.edu.cn/contests/pat-a-practise/1012
题目是很简单的,由于数据量很小,直接用O(N^2)的方法就可以了。
#include<iostream> using namespace std; struct info { string id; int score[4]; int rank[4]; }; int n,m; info student[2001]; void sort() { info tmp; for (int i = 0; i < 4; i++){ for (int j = 1; j < n; j++) { tmp = student[j]; int k = j - 1; while (k >=0 && student[j].score[i] > student[k].score[i]) --k; for (int p = j-1; p >= k+1; --p) student[p+1] = student[p]; student[k+1] = tmp; } int rank = 1; int score; int s = 0; while (s < n){ score = student[s].score[i]; int tt = 0; while (student[s].score[i] == score && s < n){ student[s].rank[i] = rank; s++; tt++; } rank += tt; } } } int main() { cin>>n>>m; for (int i = 0; i < n; i++){ cin>>student[i].id>>student[i].score[1]>>student[i].score[2]>>student[i].score[3]; student[i].score[0] = (student[i].score[1] + student[i].score[2] + student[i].score[3]) / 3; } sort(); for (int i = 0; i < n ; i++) cout<<student[i].id<<" "<<student[i].rank[0]<<" "<<student[i].rank[1]<<" "<<student[i].rank[2]<<endl; for (int i = 0; i < m; i++){ string id; cin>>id; int j; for (j = 0; j < n; j++) if (id == student[j].id){ int r = n + m; int t; for (int k = 0; k < 4; k++) if (student[j].rank[k] < r){ r = student[j].rank[k]; t = k; } switch (t){ case 0: cout<<r<<" A"<<endl;break; case 1: cout<<r<<" C"<<endl;break; case 2: cout<<r<<" M"<<endl;break; case 3: cout<<r<<" E"<<endl;break; default: cout<<t<<endl; break; } break; } if (j == n) cout<<"N/A"<<endl; } }
浙公网安备 33010602011771号