题意:
有N个学生M组查询
N行: 学生编号, 三组成绩
M行:查询编号M的学生,最好的成绩排第几
注意四组不同的学科有先后关系
思路:
数据辣么小,暴力!
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
const int maxn=1000000;
int num[maxn];
int c[maxn];
int m[maxn];
int e[maxn];
int a[maxn];
int main()
{
int n,t;
cin>>n>>t;
memset(c,-1,sizeof(c));
memset(m,-1,sizeof(m));
memset(e,-1,sizeof(e));
memset(a,-1,sizeof(a));
for(int i=1;i<=n;i++)
{
int number;
scanf("%d",&number);
scanf("%d%d%d",&c[number],&m[number],&e[number]);
double x=(c[number]+m[number]+e[number])/3;
int f=int (x);
if(x+0.5>=f)
a[number]=f+1;
else
a[number]=f;
}
int st=100000;
for(int j=1;j<=t;j++)
{
int y;
scanf("%d",&y);
if(a[y]==-1)
{
printf("N/A\n");
continue;
}
int tep=1,mini=maxn,op=1,cot=1;
for(int i=st;i<=maxn;i++)
{
if(c[i]>c[y])
tep++;
}
mini=tep;
tep=1;
for(int i=st;i<=maxn;i++)
{
if(m[i]>m[y])
tep++;
}
if(mini>tep)
{
cot=1;
op=2;
mini=tep;
}
tep=1;
for(int i =st;i<=maxn;i++)
{
if(e[i]>e[y])
tep++;
}
if(mini>tep)
{
cot=1;
op=3;
mini=tep;
}
tep=1;
for(int i =st;i<=maxn;i++)
{
if(a[i]>a[y])
tep++;
}
if(mini>=tep)
{
cot=1;
op=4;
mini=tep;
}
if(op==4)
{
printf("%d A\n",mini);
}
else if(op==1)
printf("%d C\n",mini);
else if(op==2)
printf("%d M\n",mini);
else
printf("%d E\n",mini);
}
return 0;
}