三分法:Party all the time
2012-08-10 10:50
134 查看
Party All the Time
Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 829 Accepted Submission(s): 308
[align=left]Problem Description[/align]
In the Dark forest, there is a Fairy kingdom where all the spirits will go together and Celebrate the harvest every year. But there is one thing you may not know that they hate walking so much that they would prefer to stay at home
if they need to walk a long way.According to our observation,a spirit weighing W will increase its unhappyness for S3*W units if it walks a distance of S kilometers.
Now give you every spirit's weight and location,find the best place to celebrate the harvest which make the sum of unhappyness of every spirit the least.
[align=left]Input[/align]
The first line of the input is the number T(T<=20), which is the number of cases followed. The first line of each case consists of one integer N(1<=N<=50000), indicating the number of spirits. Then comes N lines in the order that
x[i]<=x[i+1] for all i(1<=i<N). The i-th line contains two real number : Xi,Wi, representing the location and the weight of the i-th spirit. ( |xi|<=106, 0<wi<15 )
[align=left]Output[/align]
For each test case, please output a line which is "Case #X: Y", X means the number of the test case and Y means the minimum sum of unhappyness which is rounded to the nearest integer.
[align=left]Sample Input[/align]
1 4 0.6 5 3.9 10 5.1 7 8.4 10
[align=left]Sample Output[/align]
Case #1: 832
凸函数,直接用三分法求解
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; #define EPS 1e-7 #define MAXN 50050 double x[MAXN], w[MAXN]; int n; double Cal(double pos){ double ans = 0; for(int i = 1; i <= n; i ++){ double tmp = abs(pos - x[i]); ans += w[i] * tmp * tmp * tmp; } return ans; } double Solve(){ double Left, Right; double mid, midmid; double mid_value, midmid_value; Left = x[1]; Right = x ; while(Left + EPS < Right){ mid = (Left + Right) / 2; midmid = (mid + Right) / 2; mid_value = Cal(mid); midmid_value = Cal(midmid); if(mid_value <= midmid_value) Right = midmid; else Left = mid; } return Cal(Left); } int main(){ int t; int cnt = 0; scanf("%d", &t); while(t --){ cnt ++; scanf("%d", &n); for(int i = 1; i <= n; i ++){ scanf("%lf %lf", &x[i], &w[i]); } printf("Case #%d: %.0lf\n", cnt, Solve()); } return 0; }
相关文章推荐
- hdu 4355 party all the time 三分法
- HDU4355-Party All the Time-三分法(模板)-2012 Multi-University Training Contest 6
- HDU 4355 Party All the Time(三分法搜索)
- 第二次组队赛之:Can you find it?&&Toxophily&& Party All the Time&& Squares
- POJ 4355 Party All the Time(三分)
- HDU 4355 Party All the Time(三分精度问题精度低WA 精度高TLE)
- Party All the Time HDU - 4355 三分
- HDU 4355 Party All the Time(仅仅为了30次提交)
- HDU 4355 Party All the Time(三分精度问题精度低WA 精度高TLE)
- Light OJ 1370 Party All the Time(欧拉函数+素数打表)
- HDU 4355 - Party All the Time
- hdu 4355 Party All the Time三分
- HDU 4355 Party All the Time【三分】
- HDU4355-Party All the Time-三分
- HDU 4355 Party All the Time(三分精度问题精度低WA 精度高TLE)
- HDU 4355 Party All the Time (三分求极值)
- HDU 4355 Party All the Time(三分精度问题精度低WA 精度高TLE)
- Ligh OJ 1370 Party All the Time (欧拉函数 +素数打表)
- HDU 4355 Party All the Time(三分)
- HDU 4355 Party All the Time(三分精度问题精度低WA 精度高TLE)