题目链接:传送门
这题太坑了,坑的我不想说话
真的有点想吐槽,感觉PAT的题目就细节描述地模糊,就让人去猜,猜得我特别恼火,不明白为什么不能说清楚呢。
这道题的问题在于,他没有说清楚排序,在分数相同的时候,排名应该是12335还是12334。
最后我看了人家的博客,因为一直有一个测试点过不了,以下是博客链接:我在这里呀!
写的有点生气真的是
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<string>
#include<algorithm>
#include<iostream>
#include<map>
#include<set>
#include<queue>
#include<stack>
#define inf 4000000000000000000
using namespace std;
typedef long long ll;
const ll maxn=1e6+50;
const ll mod=1e9+7;
const double eps=1e-9;
struct node
{
string id;
ll a,c,m,e,ranka,rankc,rankm,ranke;
}a[2050],b[2050],c[2050],d[2050];
bool cmp_c(node a,node b)
{
return a.c>b.c;
}
bool cmp_m(node a,node b)
{
return a.m>b.m;
}
bool cmp_e(node a,node b)
{
return a.e>b.e;
}
bool cmp_a(node a,node b)
{
return a.a>b.a;
}
int main()
{
ll n,m;
scanf("%lld %lld",&n,&m);
for(ll i=1;i<=n;i++)
{
cin>>a[i].id>>a[i].c>>a[i].m>>a[i].e;
a[i].a=a[i].c+a[i].m+a[i].e;
}
sort(a+1,a+1+n,cmp_a);
a[1].ranka=1;
for(ll i=2;i<=n;i++)
{
if(a[i].a==a[i-1].a)a[i].ranka=a[i-1].ranka;
else a[i].ranka=i;
}
sort(a+1,a+1+n,cmp_c);
a[1].rankc=1;
for(ll i=2;i<=n;i++)
{
if(a[i].c==a[i-1].c)a[i].rankc=a[i-1].rankc;
else a[i].rankc=i;
}
sort(a+1,a+1+n,cmp_m);
a[1].rankm=1;
for(ll i=2;i<=n;i++)
{
if(a[i].m==a[i-1].m)a[i].rankm=a[i-1].rankm;
else a[i].rankm=i;
}
sort(a+1,a+1+n,cmp_e);
a[1].ranke=1;
for(ll i=2;i<=n;i++)
{
if(a[i].e==a[i-1].e)a[i].ranke=a[i-1].ranke;
else a[i].ranke=i;
}
for(ll i=1;i<=m;i++)
{
string x;
cin>>x;
bool flag=0;
for(ll j=1;j<=n;j++)
{
if(a[j].id==x)
{
flag=1;
if(a[j].ranka<=a[j].rankc&&a[j].ranka<=a[j].rankm&&a[j].ranka<=a[j].ranke)printf("%lld A\n",a[j].ranka);
else if(a[j].rankc<=a[j].ranka&&a[j].rankc<=a[j].rankm&&a[j].rankc<=a[j].ranke)printf("%lld C\n",a[j].rankc);
else if(a[j].rankm<=a[j].rankc&&a[j].rankm<=a[j].ranka&&a[j].rankm<=a[j].ranke)printf("%lld M\n",a[j].rankm);
else if(a[j].ranke<=a[j].rankc&&a[j].ranke<=a[j].rankm&&a[j].ranke<=a[j].ranka)printf("%lld E\n",a[j].ranke);
break;
}
}
if(!flag)printf("N/A\n");
}
//scanf("%lld",&n);
return 0;
}