#include <cstdio>
#include <algorithm>
#include "string.h"
#include <queue>
using namespace std;
typedef struct D
{
char num[20] ;
int grade ;
int group ;
int rank ;
int grank ;
bool operator < (const D d )const
{
if(grade != d.grade) return grade<d.grade ;
else
{
// num ԽСÓÅÏȼ¶Ô½´ó
if( strcmp( num , d.num ) < 0) return false ;
else return true ;
}
}
}D;
int main(void)
{
int N ;
int local = 1 ;
int k = 0 ;
D rankTemp ;
int allNum = 0;
priority_queue<D>qAll ;
//freopen("input.txt" , "r" , stdin);
scanf("%d" , &N);
for( local = 1 ; local <= N ; local ++ )
{
int count ;
int i = 0;
D dtemp ;
scanf("%d" , &count);
allNum = allNum + count ;
priority_queue<D>Q ;
while(count--)
{
D d ;
scanf("%s %d" , d.num , &d.grade);
d.grank = 0 ;
d.rank = 0 ;
d.group = local ;
Q.push(d);
}
//½øÐÐÅÅÃû
while(!Q.empty())
{
i ++ ;
if( i == 1)
{
dtemp = Q.top();
dtemp.grank = 1 ;
qAll.push(dtemp);
Q.pop();
continue ;
}
else
{
if(Q.top().grade == dtemp.grade)
{
int rank = dtemp.grank ;
dtemp = Q.top();
dtemp.grank = rank ;
Q.pop();
}
else
{
dtemp = Q.top();
dtemp.grank = i ;
Q.pop();
}
qAll.push(dtemp);
}
}
}
printf("%d\n" , allNum);
while(!qAll.empty())
{
k ++ ;
if(k == 1)
{
rankTemp = qAll.top() ;
rankTemp.rank = 1 ;
printf("%s %d %d %d\n" , rankTemp.num , rankTemp.rank , rankTemp.group , rankTemp.grank);
qAll.pop();
}
else
{
if(rankTemp.grade == qAll.top().grade)
{
int rank ;
rank = rankTemp.rank ;
rankTemp = qAll.top();
rankTemp.rank = rank ;
printf("%s %d %d %d\n" , rankTemp.num , rankTemp.rank , rankTemp.group , rankTemp.grank);
qAll.pop();
}
else
{
rankTemp = qAll.top();
rankTemp.rank = k ;
printf("%s %d %d %d\n" , rankTemp.num , rankTemp.rank , rankTemp.group , rankTemp.grank);
qAll.pop();
}
}
}
return 0 ;
}
1025. PAT Ranking
最新推荐文章于 2024-02-17 10:27:13 发布