1. 程式人生 > >hdu 4355 Party All the Time(三分)

hdu 4355 Party All the Time(三分)

while pid const d+ ans acm space += bits

題目鏈接:hdu 4355 Party All the Time

題意:

有n個人,在一個一維的坐標軸上,現在讓他們聚在一起。

每個人移動一段距離會產生一個 不開心值=S3*W,現在問你最小的全部加起來的不開心值是多少。

題解:

目標函數是一個凸函數,直接上三分就行了。

技術分享
 1 #include<bits/stdc++.h>
 2 #define F(i,a,b) for(int i=a;i<=b;i++)
 3 using namespace std;
 4 typedef pair<double,double>P;
 5 const int N=1e5+7;
6 int t,n,cas; 7 P a[N]; 8 9 double check(double mid) 10 { 11 double ans=0; 12 F(i,1,n) 13 { 14 double tmp=abs(a[i].first-mid); 15 ans+=tmp*tmp*tmp*a[i].second; 16 } 17 return ans; 18 } 19 20 int main() 21 { 22 scanf("%d",&t); 23 while(t--) 24 {
25 scanf("%d",&n); 26 F(i,1,n)scanf("%lf%lf",&a[i].first,&a[i].second); 27 double l=0,r=1e6; 28 F(i,1,100) 29 { 30 double mid=(l+r)/2,mmid=(mid+r)/2; 31 if(check(mid)>check(mmid))l=mid;else r=mmid; 32 } 33 printf("
Case #%d: %.0f\n",++cas,check(l)); 34 } 35 return 0; 36 }
View Code

hdu 4355 Party All the Time(三分)