1012
程序员文章站
2024-01-12 08:07:34
...
自己写的一直段错误,看了其他博主的代码重写才过。其实也是很基础的排序题,但一遇到稍微复杂点的大脑就很混乱,数学渣真的影响逻辑思路,遇到不熟悉的就一片混乱,并且也很难静下心来思考。
//time:2019/12/29 21:30
//PAT A 1012
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef struct STU
{
int id;
int score[4];
}student;
student stus[2000];
int Rank[1000000][4]={0};
int now;
char Cou[4]={'A','C','M','E'};
bool compare(student A,student B)
{
return A.scorce[now]>B.scorce[now];
}
int main()
{
int n,m;
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d%d%d%d",&stus[i].id,&stus[i].scorce[1],&stus[i].scorce[2],&stus[i].scorce[3]);
stus[i].scorce[0]=(stus[i].scorce[1]+stus[i].scorce[2]+stus[i].scorce[3])/3;
}
for(now=0;now<4;now++)
{
sort(stus,stus+n,compare);
Rank[stus[0].id][now]=1;
for(int i=1;i<n;i++)
{
if(stus[i].scorce[now]==stus[i-1].scorce[now])
{
Rank[stus[i].id][now]=Rank[stus[i-1].id][now];
}
else
{
Rank[stus[i].id][now]=i+1;
}
}
}
for(int i=0;i<m;i++)
{
int id;
scanf("%d",&id);
if(Rank[id][0]==0)
{
printf("N/A\n");
}
else
{
int pos=0;
for(int j=0;j<4;j++)
{
if(Rank[id][j]<Rank[id][pos])
pos=j;
}
printf("%d %c\n",Rank[id][pos],Cou[pos]);
}
}
// for(int i=0;i<n;i++)
// {
// printf("%d %d %d %d\n",stus[i].id,stus[i].scorce[1],stus[i].scorce[2],stus[i].scorce[3]);
// }
return 0;
}
上一篇: java压缩文件并对压缩包进行加密