学习委员候选人
解题思路
模拟。分别对语文、数学排序,得到排名后判断是否满足条件,记录权值再排序。
code
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int n;
int v[50010];
string nam[50010];
struct abc{
int num,id;
}yw[50010],sx[50010],tot[50010];
int cmp(abc p,abc q)
{
if(p.num!=q.num)
return p.num>q.num;
return p.id>q.id;
}
int main()
{
cin>>n;
for(int i=1;i<=n;yw[i].id=i,sx[i].id=i,i++)
cin>>nam[i]>>yw[i].num>>sx[i].num;
sort(yw+1,yw+n+1,cmp);
sort(sx+1,sx+n+1,cmp);
int i=1,j;
for(;i<=n/2||yw[i].num==yw[i-1].num;i++)
{
if(yw[i].num!=yw[i-1].num) j=i;
tot[yw[i].id].num=j;
tot[yw[i].id].id=yw[i].id;
}
for(;i<=n;i++)
v[yw[i].id]=1;
i=1;
for(;i<=n/2||sx[i].num==sx[i-1].num;i++)
{
if(sx[i].num!=sx[i-1].num) j=i;
tot[sx[i].id].num*=j;
tot[sx[i].id].id=sx[i].id;
}
for(;i<=n;i++)
v[sx[i].id]=1;
sort(tot+1,tot+n+1,cmp);
int flg=1;
for(int i=n;i>=1;i--)
if(!v[tot[i].id]&&tot[i].id)
{
cout<<nam[tot[i].id]<<endl;
flg=0;
}
if(flg)
printf("none\n");
}