//
// main.cpp
// PAT_1075. PAT Judge
//
// Created by wjq on 17/8/20.
// Copyright © 2017年 wjq. All rights reserved.
//
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
map<int,int> m;
int score[10],submit[100005];
struct Player
{
int id,get[10],perfectNum,canBeOutput;
}player[10005];
int idx=0;
bool hasSubmit[10005];
void init()
{
for(int i=0;i<10005;i++)
{
for(int j=0;j<10;j++)
player[i].get[j]=-2;
player[i].perfectNum=0;
player[i].canBeOutput=0;
}
}
int cmp(Player a, Player b)
{
if(a.get[0]==b.get[0])
{
if(a.perfectNum==b.perfectNum)
return a.id<b.id;
return a.perfectNum>b.perfectNum;
}
return a.get[0]>b.get[0];
}
int main(int argc, const char * argv[]) {
init();
int N,K,M,a,b,c;
scanf("%d%d%d",&N,&K,&M);
for(int i=1;i<=K;i++)
scanf("%d",&score[i]);
for(int i=0;i<M;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(hasSubmit[a]==false)
{
player[idx].id=a;
m[a]=idx;
player[idx].get[b]=c;
hasSubmit[a]=true;
idx++;
}
else
{
if(player[m[a]].get[b]==-2||c>player[m[a]].get[b])
player[m[a]].get[b]=c;
}
}
for(int i=0;i<idx;i++)
{
int sum=0,canBeOutput=0;
for(int j=1;j<=K;j++)
{
if(player[i].get[j]>=0)
{
canBeOutput=1;
sum+=player[i].get[j];
}
if(player[i].get[j]==score[j])
player[i].perfectNum++;
if(player[i].get[j]==-1)
player[i].get[j]=0;
}
player[i].canBeOutput=canBeOutput;
player[i].get[0]=sum;
}
sort(player,player+idx,cmp);
int rank=1;
for(int i=0;i<idx;i++)
{
if(player[i].canBeOutput==1)
{
if(player[i].get[0]!=player[i-1].get[0]&&i!=0)
rank=i+1;
printf("%d %05d %d",rank,player[i].id,player[i].get[0]);
for(int j=1;j<=K;j++)
if(player[i].get[j]!=-2)
printf(" %d",player[i].get[j]);
else
printf(" -");
printf("\n");
}
}
return 0;
}
一道模拟题..PAT常见排序题...注意细节就可以了...
模拟了一个小时...一次就过了 QAQ hin开心~