PAT (Advanced Level) 1025. PAT Ranking (25)
简单题。
#include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<cstdio> #include<queue> #include<string> #include<vector> using namespace std; const int maxn=110; int n,tot=0; int sz[maxn]; struct X { string id; int c; int ans1,ans2,ans3; }s[30000+10]; bool cmp(const X&a,const X&b) { return a.c>b.c; } bool cmp1(const X&a,const X&b) { if(a.ans1==b.ans1) return a.id<b.id; return a.ans1<b.ans1; } int main() { scanf("%d",&n); int sum=0; for(int i=1;i<=n;i++) { scanf("%d",&sz[i]); for(int j=1;j<=sz[i];j++) { ++tot; cin>>s[tot].id; cin>>s[tot].c; s[tot].ans2=i; } sort(s+sum+1,s+1+tot,cmp); s[sum+1].ans3=1; for(int i=sum+2;i<=tot;i++) { if(s[i].c==s[i-1].c) s[i].ans3=s[i-1].ans3; else s[i].ans3=i-sum; } sum=tot; } sort(s+1,s+tot+1,cmp); s[1].ans1=1; for(int i=2;i<=tot;i++) { if(s[i].c==s[i-1].c) s[i].ans1=s[i-1].ans1; else s[i].ans1=i; } sort(s+1,s+tot+1,cmp1); printf("%d\n",tot); for(int i=1;i<=tot;i++) { cout<<s[i].id; printf(" %d %d %d\n",s[i].ans1,s[i].ans2,s[i].ans3); } return 0; }