#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
struct Record
{
string id;
int mark;
int local;
int frank;
int lrank;
bool operator <(const Record & r) const
{
if(mark!=r.mark)
{
return mark>r.mark;
}
else
{
return id<r.id;
}
}
Record(string _id,int _mark,int _local):id(_id),mark(_mark),local(_local){}
};
vector<Record> v;
vector<int> vrank;
vector<int> vmark;
vector<int> vc;
int main()
{
int N,K;
cin>>N;
string id;
int mark;
int all=0;
for(int i=1;i<=N;i++)
{
cin>>K;
all+=K;
for(int j=0;j<K;j++)
{
cin>>id>>mark;
v.push_back(Record(id,mark,i));
}
}
sort(v.begin(),v.end());
vrank.resize(N+1);
vmark.resize(N+1);
vc.reserve(N+1);
vmark.assign(N+1,101);
vrank.assign(N+1,0);
vc.assign(N+1,1);
vector<Record>::iterator it;
for(it=v.begin();it!=v.end();it++)
{
if(it->mark<vmark[0])
{
vrank[0]+=vc[0];
it->frank=vrank[0];
vmark[0]=it->mark;
vc[0]=1;
}
else//==
{
it->frank=vrank[0];
vc[0]++;
}
if(it->mark<vmark[it->local])
{
vrank[it->local]+=vc[it->local];
it->lrank=vrank[it->local];
vmark[it->local]=it->mark;
vc[it->local]=1;
}
else//==
{
it->lrank=vrank[it->local];
vc[it->local]++;
}
}
cout<<all<<endl;
for(it=v.begin();it!=v.end();it++)
cout<<it->id<<" "<<it->frank<<" "<<it->local<<" "<<it->lrank<<endl;
return 0;
}
1025. PAT Ranking (25) @ PAT (Advanced Level) Practise
最新推荐文章于 2018-01-15 09:12:09 发布