比赛 20101110 评测结果 WWWWWTWTTT
题目名称 YL杯超级篮球赛 最终得分 0
用户昵称 Pom 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-11-10 21:31:02
显示代码纯文本
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <cmath>
  6.  
  7. using namespace std;
  8.  
  9. const int MAXN=500001;
  10. const int oo=100000000000LL;
  11.  
  12. long long n,i,j,x[MAXN],y[MAXN],w[MAXN];
  13. long long p1,p2,ans,t,k,da;
  14. long long liml=oo,limr=-oo,limu=-oo,limd=oo;
  15.  
  16. long long cal(long long x1,long long y1)
  17. {
  18. long long tt;
  19. long long re=0;
  20. for (tt=1;tt<=n;tt++)
  21. re+=w[tt]*(abs(x[tt]-x1)+abs(y[tt]-y1));
  22. return re;
  23. }
  24.  
  25. void init()
  26. {
  27. freopen("ballc.in","r",stdin);
  28. freopen("ballc.out","w",stdout);
  29. scanf("%d",&n);
  30. for (i=1;i<=n;i++)
  31. scanf("%d",&w[i]);
  32. for (i=1;i<=n;i++)
  33. {
  34. scanf("%d%d",&x[i],&y[i]);
  35. if (x[i]<liml) liml=x[i];
  36. if (x[i]>limr) limr=x[i];
  37. if (y[i]<limd) limd=y[i];
  38. if (y[i]>limu) limu=y[i];
  39. }
  40. }
  41.  
  42. void solve()
  43. {
  44. ans=limr;
  45. srand(1);
  46. for (;;)
  47. {
  48. if (cal(ans,0)>cal(ans-1,0))
  49. {
  50. ans=ans-1;
  51. limr=ans;
  52. }
  53. else
  54. if (cal(ans,0)>cal(ans+1,0))
  55. {
  56. ans=ans+1;
  57. liml=ans;
  58. }
  59. else break;
  60. t=rand()%(limr-liml+1)+liml;
  61. if (cal(t,0)<cal(ans,0)) ans=t;
  62. }
  63. k=limu;
  64. for (;;)
  65. {
  66. if (cal(k,0)>cal(k-1,0))
  67. {
  68. k=k-1;
  69. limu=k;
  70. }
  71. else
  72. if (cal(k,0)>cal(k+1,0))
  73. {
  74. k=k+1;
  75. limd=k;
  76. }
  77. else break;
  78. t=rand()%(limu-limd+1)+limd;
  79. if (cal(0,t)<cal(0,k)) k=t;
  80. }
  81. da=cal(ans,k);
  82. cout<<da<<".00"<<endl;
  83. }
  84.  
  85. int main()
  86. {
  87. init();
  88. solve();
  89. return 0;
  90. }