比赛 |
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;
- }