您的位置:首页 > 其它

1075. PAT Judge (25)

2014-10-15 08:40 197 查看
#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: