hdu 4355 Party All the Time(三分)
阿新 • • 發佈:2017-05-28
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;View Code6 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 }
hdu 4355 Party All the Time(三分)