您的位置:首页 > 其它

BZOJ2508: 简单题

2016-01-19 19:48 281 查看
纯的数学题
http://www.cnblogs.com/clrs97/p/4403197.html
可以把那个式子推出来

然后我一开始脑抽的去配方 结果搞傻掉了。。。

后来发现对于一个确定的x 要使ans最小则y为一个定量

那么就是把y化成x在带入就好了‘

Claris讲的很详细啊(说句不要脸的话其实我就是这么想的

#include<cstdio>
#include<cmath>
#define N 120010
int n,q,Oper,i,m;
double X1,X2,Y1,Y2;
double a,b,c,d;
double Aa
,Bb
,Cc
,Ab
,Ac
,Bc
;
double Suma,Sum2b,Sum3c,Sumb,Sumc,Sum2c,Ans;
const
double eps=1e-8;

char hc;
inline void read(int &a)
{
a=0;do hc=getchar();while(hc<'0'||hc>'9');
while(hc<='9'&&hc>='0')a=(a<<3)+(a<<1)+hc-'0',hc=getchar();
}
inline double abs(double a){return a<0?-a:a;}
inline bool isZero(double x){return abs(x)<eps;}
inline double solve(double a,double b,double c)
{
if(isZero(a))return c;
double x=-b/(2*a);
return a*x*x+b*x+c;
}
int main()
{
read(q);
while(q--)
{
read(Oper);
if(Oper==0)
{
scanf("%lf%lf%lf%lf",&X1,&Y1,&X2,&Y2);
if(isZero(X1-X2))
a=1,b=0,c=-X1;
else a=(Y2-Y1)/(X2-X1),b=-1,c=Y1-a*X1;
d=a*a+b*b;
Aa[++n]=a*a/d,Bb
=b*b/d,Cc
=c*c/d,
Ab
=a*b/d,Ac
=a*c/d,Bc
=b*c/d;
Suma+=Aa
,Sum2b+=Bb
,Sum3c+=Cc
,
Sumb+=Ab
,Sumc+=Ac
,Sum2c+=Bc
;
m++;
}
else if(Oper==1)
{
read(i);
Suma-=Aa[i],Sum2b-=Bb[i],Sum3c-=Cc[i],
Sumb-=Ab[i],Sumc-=Ac[i],Sum2c-=Bc[i];
m--;
}
if(Oper==2)
{
if(!m){puts("0.00");continue;}
if(isZero(Sum2b))
a=b=0;
else a=-Sumb/Sum2b,b=-Sum2c/Sum2b;
Ans=solve(Suma+2*a*Sumb+a*a*Sum2b,2*(b*Sumb+Sumc+a*b*Sum2b+a*Sum2c),b*b*Sum2b+2*b*Sum2c+Sum3c);
if(isZero(Ans))Ans=0;
printf("%.2f\n",Ans);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: