zoukankan      html  css  js  c++  java
  • hdu 4355 Party All the Time三分

    hdu 4355 Party All the Time

    题目:hdu4335

    恩,多校第六场的题,看了题解说三分最简单赶紧来看看。。果然就这样过了。

    不过之前做过一道三分的题目,有位大神二分也可以过,也没看懂他怎么写的。。不知道这个可不可以二分水过了。

    至于为什么是三分,我是感觉题目给出的函数结合题意得出的图像应该是具有凸性或凹性的,所以这里用三分比较合适吧。

     

    不过郁闷的是C++就超时,G++就AC。。唉,不管了。

    标程的三分那里直接写成

    int time=60;
    while(time--)
    {
         ···
    }

    感觉是水过了- -

    当然除了三分,题解里还说可以枚举两个端点,极值求导什么的。

    三分的代码:

     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #define eps 1e-6
     6 using namespace std;
     7 int n;
     8 double x[50010],w[50010];
     9 
    10 double fuc(double a)
    11 {
    12     double d,ans=0;
    13     for(int i=1;i<=n;i++)
    14     {
    15         d=fabs(x[i]-a);
    16         ans+=d*d*d*w[i];
    17     }
    18     return ans;
    19 }
    20 
    21 int main()
    22 {
    23     int t,tt=1;
    24     scanf("%d",&t);
    25     while(t--)
    26     {
    27         scanf("%d",&n);
    28         for(int i=1;i<=n;i++)
    29             scanf("%lf%lf",x+i,w+i);
    30         double m1,m2; //三分
    31         double l =-1e6+0.0,r =1e6+0.0;
    32         while(r-l>eps)
    33         {
    34             m1=(l+r)/2;
    35             m2=(m1+r)/2;
    36             if(fuc(m1)<fuc(m2))r=m2;
    37             else l=m1;
    38         }
    39         if(n==1) printf("Case #%d: %.0f\n",tt++,0.0);
    40         else
    41         printf("Case #%d: %.0f\n",tt++,fuc(m1));
    42     }
    43     return 0;
    44 }

     http://acm.hdu.edu.cn/showproblem.php?pid=4355

     

  • 相关阅读:
    CCF计算机职业资格认证考试 201809-2 买菜
    【CodeVS3013】单词背诵
    【CodeVS3304】水果姐逛水果街Ⅰ
    【CodeVS4246】奶牛的身高
    【hdu1247】Hat’s Words
    【CodeVS4189】字典
    【CodeVS4244】平衡树练习
    【poj3264】Balanced Lineup
    【树状数组】
    【CodeVS1163】访问艺术馆
  • 原文地址:https://www.cnblogs.com/xdruid/p/2638895.html
Copyright © 2011-2022 走看看