PAT甲级1012 The Best Rank

mac2024-05-09  4

想法:这道题没想出啥更优的方法,就是排序然后查找。 第一次提交没注意以下情况: 排名相同的情况

#include<iostream> #include<iomanip> #include<vector> #include<algorithm> using namespace std; typedef struct { int id; int g[4]; int r[4]; }student; student s[2005]; bool cmp0(student a,student b){ return a.g[0]>b.g[0]; } bool cmp1(student a,student b){ return a.g[1]>b.g[1]; } bool cmp2(student a,student b){ return a.g[2]>b.g[2]; } bool cmp3(student a,student b){ return a.g[3]>b.g[3]; } int main() { //student s[2005]; int query_id[2005]; int n,m; cin>>n>>m; for(int i=0; i<n; i++){ cin>>s[i].id>>s[i].g[1]>>s[i].g[2]>>s[i].g[3]; s[i].g[0]=(s[i].g[1]+s[i].g[2]+s[i].g[3])/3; } for(int i=0; i<m; i++){ cin>>query_id[i]; } sort(s,s+n,cmp0); for(int i=0; i<m; i++) for(int j=0; j<n; j++){ if(query_id[i]==s[j].id){ s[j].r[0]=j+1; int k=1; while(s[j-k].g[0]==s[j].g[0]){ s[j].r[0]--; k++; } break; } } sort(s,s+n,cmp1); for(int i=0; i<m; i++) for(int j=0; j<n; j++){ if(query_id[i]==s[j].id){ s[j].r[1]=j+1; int k=1; while(s[j-k].g[1]==s[j].g[1]){ s[j].r[1]--; k++; } break; } } sort(s,s+n,cmp2); for(int i=0; i<m; i++) for(int j=0; j<n; j++){ if(query_id[i]==s[j].id){ s[j].r[2]=j+1; int k=1; while(s[j-k].g[2]==s[j].g[2]){ s[j].r[2]--; k++; } break; } } sort(s,s+n,cmp3); for(int i=0; i<m; i++) for(int j=0; j<n; j++){ if(query_id[i]==s[j].id){ s[j].r[3]=j+1; int k=1; while(s[j-k].g[3]==s[j].g[3]){ s[j].r[3]--; k++; } break; } } for(int i=0; i<m; i++){ max_rank(query_id[i],n); } return 0; }
最新回复(0)