记录编号 31899 评测结果 AAAAA
题目名称 [NOI 1997]竞赛排名 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2011-11-04 12:13:44 内存使用 0.00 MiB
显示代码纯文本
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;

int sco[1000][8]={{0}},pernum[1000]={0},persum[1000]={0};
double possum[1000]={0};
	
void swapint(int &x,int &y)
{
	int temp;
	temp=x;
	x=y;
	y=temp;
}

void swapdouble(double &x,double &y)
{
	double temp;
	temp=x;
	x=y;
	y=temp;
}

void qqsort(int l,int r)
{
	int ll,rr,temp,temp3,temp4;
	double temp2;
	ll=l;
	rr=r;
	temp=rand()%(r-l+1)+l;
	temp2=possum[temp];
	temp3=persum[temp];
	temp4=pernum[temp];
	while (ll<=rr)
	{
		while ((possum[ll]>temp2)||(possum[ll]==temp2&&persum[ll]>temp3)||(/**/possum[ll]==temp2&&persum[ll]==temp3&&pernum[ll]<temp4/**/))
			ll++;
		while ((temp2>possum[rr])||(temp2==possum[rr]&&temp3>persum[rr])||(/**/temp2==possum[rr]&&temp3==persum[rr]&&temp4<pernum[rr]/**/))
			rr--;
		if (ll<=rr)
		{
			swapdouble(possum[ll],possum[rr]);
			swapint(persum[ll],persum[rr]);
			swapint(pernum[ll],pernum[rr]);
			ll++;
			rr--;
		}
	}
	if (l<rr)
		qqsort(l,rr);
	if (ll<r)
		qqsort(ll,r);
}

int main(void)
{
	freopen("competitionsort.in","r",stdin);
	freopen("competitionsort.out","w",stdout);
	int i=0,j=0,n=0;
	double pos=0,temp=0,temp2[8]={0},comave[8]={0};
	scanf("%d\n",&n);
	for (i=0;i<n;i++)
	{
		for (j=0;j<8;j++)
		{
			scanf("%d",&sco[i][j]);
			persum[i]+=sco[i][j];
			comave[j]+=sco[i][j];
		}
		pernum[i]=i+1;
	}
	for (j=0;j<8;j++)
		comave[j]/=n;
	for (j=0;j<8;j++)
	{
		for (i=0;i<n;i++)
			temp2[j]+=abs(sco[i][j]-comave[j]);
		temp2[j]/=n;
	}
	for (i=0;i<n;i++)
		for (j=0;j<8;j++)
		{
			temp=sco[i][j]-comave[j];
			if (temp==0)
				pos=0;
			else
				pos=temp/temp2[j];
			if (j<3)
				possum[i]+=pos;
			else
				possum[i]+=pos*0.8;
		}
	qqsort(0,n-1);
	for (i=0;i<n;i++)
		printf("%d\n",pernum[i]);
	fclose(stdin);
	fclose(stdout);
	return(0);
}