比赛 NOIP2007普及组(复现) 评测结果 AAAAAAAAAA
题目名称 奖学金 最终得分 100
用户昵称 wrp12138 运行时间 0.006 s
代码语言 C++ 内存使用 13.67 MiB
提交时间 2020-02-09 18:05:39
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct student
{
	int number;
	int chinese;
	int math;
	int english;
	int total;
};
student st[305];
bool cmp(const student &first,const student &second)
{
	return first.total>second.total;
}
bool cmp1(const student &first,const student &second)
{
	return first.chinese>second.chinese;
}
bool cmp2(const student &first,const student &second)
{
	return first.number<second.number;
}
int a[350]={0},b[350]={0};
int main()
{
	freopen("pj07-1.in","r",stdin);
	freopen("pj07-1.out","w",stdout);
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		st[i].number=i+1;
		scanf("%d %d %d",&st[i].chinese,&st[i].math,&st[i].english);
	}
	st[n].number=400;
	st[n].chinese=0;
	st[n].math=0;
	st[n].english=0;
	st[n].total=0;
	for(int i=0;i<n;i++)
	{
		st[i].total=st[i].chinese+st[i].math+st[i].english;
	}
	sort(st,st+n,cmp);
	int t=0,s=0;
	for(int i=0;i<n-1;i++)
	{
		if(st[i].total==st[i+1].total&&s==0)
		{
			a[t]=i;
			s=1;
		}
		else if(st[i].total>st[i+1].total&&s==1)
		{
			b[t]=i;
			s=0;
			t=t+1;
		}
	}
	for(int i=0;i<t;i++)
	{
		sort(st+a[i],st+b[i]+1,cmp1);
	}
	t=0;
	s=0;
	memset(a, 0, sizeof(a));
	memset(b, 0, sizeof(b));
	for(int i=0;i<n-1;i++)
	{
		if(st[i].total==st[i+1].total&&s==0&&st[i].chinese==st[i+1].chinese)
		{
			a[t]=i;
			s=1;
		}
		else if(s==1&&st[i].chinese!=st[i+1].chinese)
		{
			b[t]=i;
			s=0;
			t=t+1;
		}
	}
	for(int i=0;i<t;i++)
	{
		sort(st+a[i],st+b[i]+1,cmp2);
	}
	for(int i=0;i<5;i++)
	{
		printf("%d %d",st[i].number,st[i].total);
		if(i<4)
		printf("\n");
	}
}