1075. PAT Judge (25)

#include<iostream>
#include<algorithm>
#include<iomanip>
using namespace std;
#define MAX 10005
struct student
{
int id;
int score[7];
int solved;
int sum;
bool flag;
}stu[MAX];
int score[7];
bool cmp(const struct student &a,const struct student &b)
{
if(a.sum>b.sum)return true;
else if(a.sum==b.sum)
{
return a.solved==b.solved?(a.id<b.id):(a.solved>b.solved);
}
else
{
return false;
}
}
int main()
{
int i,j;
int n,m,k;
int name,id,s;
cin>>n>>k>>m;
for(i=1;i<=k;i++)
{
cin>>score[i];
}


for(i=1;i<=n;i++)
{
stu[i].id=i;
stu[i].solved=0;
stu[i].sum=0;
stu[i].flag=false;
for(j=1;j<=k;j++)
{
stu[i].score[j]=-2;
}
}


for(i=1;i<=m;i++)
{
cin>>name>>id>>s;
if(s>=0)
{
stu[name].flag=true;
if(stu[name].score[id]<s)
{
stu[name].score[id]=s;
if(s==score[id])//这个判断语句要写在这里面,,不然最后一个测试点通不过,为什么呢?
   {
stu[name].solved++;
   }
}

}
else if(s==-1)
{
if(stu[name].score[id]<s)
{
stu[name].score[id]=s;
}
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=k;j++)
{
if(stu[i].score[j]>=0)
{
stu[i].sum+=stu[i].score[j];
}
}

}
sort(stu+1,stu+1+n,cmp);
int rank,len;

cout<<"1 ";
cout<<setfill('0')<<setw(5)<<stu[1].id<<" ";
cout<<stu[1].sum;


for(i=1;i<=k;i++)
{
if(stu[1].score[i]>=0)cout<<" "<<stu[1].score[i];
else if(stu[1].score[i]==-1)cout<<" "<<"0";
else cout<<" "<<"-";
}
cout<<endl;
if(n>1&&stu[0].sum!=stu[1].sum)len=1;
else len=0;


for(i=2,rank=1;i<=n;i++)
{
if(stu[i].flag==false)continue;
if(stu[i].sum==stu[i-1].sum)
{
cout<<rank<<" ";
cout<<setfill('0')<<setw(5)<<stu[i].id<<" ";
cout<<stu[i].sum;
len++;
}
else
{
rank+=len;
cout<<rank<<" ";
cout<<setfill('0')<<setw(5)<<stu[i].id<<" ";
cout<<stu[i].sum;
len=1;
}
for(j=1;j<=k;j++)
{
if(stu[i].score[j]>=0)cout<<" "<<stu[i].score[j];
   else if(stu[i].score[j]==-1)cout<<" "<<"0";
   else cout<<" "<<"-";
}
cout<<endl;
}
system("pause");
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值