题目大意:

加入直线,删除直线,求点到所有直线的距离的平方和。

题解:

把点到直线的距离公式写出来,然后展开。维护六个值,计算一个二元的多项式的最小值。

对x和y分别求导,导数都为零时取到极值。然后解一个方程组。

要各种讨论,方程的解可能不唯一,任取一个。

代码:

#include<cstdio>
#define eps 1e-7
using namespace std;
double x1[1000005],y1[1000005],x2[1000005],y2[1000005],A,B,C,D,E,F;
double abs1(double x){
if (x<0) return -x;
return x;
}
int main(){
int t;
scanf("%d",&t);
int cnt=0;
while (t--){
int cas;
scanf("%d",&cas);
if (cas==0){
cnt++;
scanf("%lf%lf%lf%lf",&x1[cnt],&y1[cnt],&x2[cnt],&y2[cnt]);
double ai=y1[cnt]-y2[cnt],bi=x2[cnt]-x1[cnt],ci=x1[cnt]*y2[cnt]-x2[cnt]*y1[cnt];
A+=ai*ci*2/(ai*ai+bi*bi);
B+=bi*ci*2/(ai*ai+bi*bi);
C+=ai*bi*2/(ai*ai+bi*bi);
D+=ai*ai/(ai*ai+bi*bi);
E+=bi*bi/(ai*ai+bi*bi);
F+=ci*ci/(ai*ai+bi*bi);
}
else if (cas==1){
int id;
scanf("%d",&id);
double ai=y1[id]-y2[id],bi=x2[id]-x1[id],ci=x1[id]*y2[id]-x2[id]*y1[id];
A-=ai*ci*2/(ai*ai+bi*bi);
B-=bi*ci*2/(ai*ai+bi*bi);
C-=ai*bi*2/(ai*ai+bi*bi);
D-=ai*ai/(ai*ai+bi*bi);
E-=bi*bi/(ai*ai+bi*bi);
F-=ci*ci/(ai*ai+bi*bi);
}
else if (cas==2){
double x,y;
if (abs1(C*C-4*D*E)<eps){
double a1,b1,c1;
if (abs1(D)>eps || abs1(C)>eps) a1=2*D,b1=C,c1=A;
else if (abs1(E)>eps || abs1(C)>eps) a1=C,b1=2*E,c1=B;
else {
printf("%.2lf\n",0.0);
continue;
}
if (abs1(E)<eps) x=-c1/a1,y=0;
else x=0,y=-c1/b1;
}
else if (abs1(C)<eps){
if (abs1(D)<eps) x=0;
else x=-A/(D*2);
if (abs1(E)<eps) y=0;
else y=-B/(E*2);
}
else if (abs1(D)<eps){
y=-A/C;
x=(-E*y*2-B)/C;
}
else if (abs1(E)<eps){
x=-B/C;
y=(-x*D*2-A)/C;
}
else{
if (abs1(E*2-C*C/(D*2))<eps) {
printf("0.00\n");
continue;
}
y=(-B+A*C/(D*2))/(E*2-C*C/(D*2));
x=(-A-C*y)/(D*2);
}
printf("%.2f\n",A*x+B*y+C*x*y+D*x*x+E*y*y+F);
}
}
return 0;
}

  

最新文章

  1. BZOJ2038 小z的袜子
  2. ruby 字符串学习笔记1
  3. PostgreSQL中的AnyArray例子
  4. Linux进程间通信方法总结
  5. hihocoder 1186
  6. 洛谷P1189 逃跑的拉尔夫(SEARCH)
  7. OpenCV学习(1) RGB颜色空间
  8. 使用PHP二维码生成类库PHP QR Code生成二维码
  9. python3学习笔记(1)
  10. vue2.0-基于elementui换肤[自定义主题]
  11. missing requires of libmysqlclient.so.18()(64bit)
  12. 标识符and数据类型
  13. SpringCloud笔记一:扫盲
  14. day89
  15. Dubbo 环境搭建
  16. 11g relocate scan ip
  17. 【BZOJ5319】军训列队(主席树)
  18. jmeter-负载
  19. linux下 vi中[noeol]以及出现 feff 的问题
  20. a标签的href和onclick

热门文章

  1. KEIL_RTX资源介绍
  2. mac 终端查看端口命令
  3. Mysql优化配置
  4. 修改php默认的FastCGI模式为ISAPI模式的方法
  5. Java项目接入阿里云OSS存储
  6. hihocoder1822 战舰日常任务
  7. BZOJ1485: [HNOI2009]有趣的数列(Catalan数,质因数分解求组合数)
  8. Android ScrollView嵌套RecyclerView导致在三星s8曲面屏显示不全问题
  9. android布局带参返回
  10. Fragment(一)--Fragment用法常见问题