比赛 20101110 评测结果 WWWWWTWTTT
题目名称 YL杯超级篮球赛 最终得分 0
用户昵称 Pom 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-11-10 21:31:02
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>

using namespace std;

const int MAXN=500001;
const int oo=100000000000LL;

long long n,i,j,x[MAXN],y[MAXN],w[MAXN];
long long p1,p2,ans,t,k,da;
long long liml=oo,limr=-oo,limu=-oo,limd=oo;

long long cal(long long x1,long long y1)
{
	long long tt;
	long long re=0;
	for (tt=1;tt<=n;tt++)
		re+=w[tt]*(abs(x[tt]-x1)+abs(y[tt]-y1));
	return re;
}

void init()
{
	freopen("ballc.in","r",stdin);
	freopen("ballc.out","w",stdout);
	scanf("%d",&n);
	for (i=1;i<=n;i++)
		scanf("%d",&w[i]);
	for (i=1;i<=n;i++)
	{
		scanf("%d%d",&x[i],&y[i]);
		if (x[i]<liml) liml=x[i];
		if (x[i]>limr) limr=x[i];
		if (y[i]<limd) limd=y[i];
		if (y[i]>limu) limu=y[i];
	}
}

void solve()
{
	ans=limr;
	srand(1);
	for (;;)
	{
		if (cal(ans,0)>cal(ans-1,0))
		{
			ans=ans-1;
			limr=ans;
		}
		else 
			if (cal(ans,0)>cal(ans+1,0))
			{
				ans=ans+1;
				liml=ans;
			}
			else break;
		t=rand()%(limr-liml+1)+liml;
		if (cal(t,0)<cal(ans,0)) ans=t;
	}
	k=limu;
	for (;;)
	{
		if (cal(k,0)>cal(k-1,0))
		{
			k=k-1;
			limu=k;
		}
		else 
			if (cal(k,0)>cal(k+1,0))
			{
				k=k+1;
				limd=k;
			}
			else break;
		t=rand()%(limu-limd+1)+limd;
		if (cal(0,t)<cal(0,k)) k=t;
	}
	da=cal(ans,k);
	cout<<da<<".00"<<endl;
}

int main()
{
	init();
	solve();
	return 0;
}