Party All the Time
Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2400 Accepted Submission(s): 803
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.
#pragma comment(linker, "/STACK:102400000,102400000")
#include "iostream"
#include "cstring"
#include "algorithm"
#include "cmath"
#include "cstdio"
#include "sstream"
#include "queue"
#include "vector"
#include "string"
#include "stack"
#include "cstdlib"
#include "deque"
#include "fstream"
#include "map"
using namespace std;
typedef long long LL;
const int INF = 0x1fffffff;
const int MAXN = 1000000+100;
#define eps 1e-14
const int mod = 100000007;
int n;
double rst;
struct node
{
double pos;
double weight;
}spirit[50000+100];
double cal(double pos)
{
double sum=0;
for (int i=0;i<n;i++)
sum+=pow(fabs(pos-spirit[i].pos),3)*spirit[i].weight;
return sum;
}
int main()
{
//freopen("in","r",stdin);
int t;
scanf("%d",&t);
for (int kase=1;kase<=t;kase++)
{
scanf("%d",&n);
int cnt=0;
double l,r;
for (int i=0;i<n;i++)
{
scanf("%lf%lf",&spirit[i].pos,&spirit[i].weight);
l=min(l,spirit[i].pos);
r=max(r,spirit[i].pos);
}
do
{
double m=(l+r)/2.0;//三分
double mm=(m+r)/2.0;
rst=cal(m);
if (rst<cal(mm)) r=mm;
else l=m;
}while (cnt++<100);//據說比賽要用這個跳出
printf("Case #%d: %.0lf\n" ,kase,rst);
}
return 0;
}