题目大意:

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

题解:

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

对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;
}

  

BZOJ 2508: 简单题的更多相关文章

  1. bzoj 2508: 简单题【拉格朗日乘数法】

    大概是对于f(x,y)求min,先把x看成常数,然后得到关于y的一元二次方程,然后取一元二次极值把y用x表示,再把x作为未知数带回去化简,最后能得到一个一元二次的式子,每次修改这个式子的参数即可. 智 ...

  2. BZOJ 2683: 简单题

    2683: 简单题 Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 913  Solved: 379[Submit][Status][Discuss] ...

  3. bzoj 4066: 简单题 kd-tree

    4066: 简单题 Time Limit: 50 Sec  Memory Limit: 20 MBSubmit: 234  Solved: 82[Submit][Status][Discuss] De ...

  4. BZOJ 3687: 简单题 bitset

    3687: 简单题 Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 小呆开始研究集合论了,他 ...

  5. BZOJ 2683: 简单题(CDQ分治 + 树状数组)

    BZOJ2683: 简单题(CDQ分治 + 树状数组) 题意: 你有一个\(N*N\)的棋盘,每个格子内有一个整数,初始时的时候全部为\(0\),现在需要维护两种操作: 命令 参数限制 内容 \(1\ ...

  6. BZOJ 2683: 简单题 [CDQ分治]

    同上题 那你为什么又发一个? 因为我用另一种写法又写了一遍... 不用排序,$CDQ$分治的时候归并排序 快了1000ms... #include <iostream> #include ...

  7. BZOJ 2683 简单题 cdq分治+树状数组

    题意:链接 **方法:**cdq分治+树状数组 解析: 首先对于这道题,看了范围之后.二维的数据结构是显然不能过的.于是我们可能会考虑把一维排序之后还有一位上数据结构什么的,然而cdq分治却可以非常好 ...

  8. BZOJ 2683: 简单题(CDQ 分治)

    题面 Time Limit: 50 Sec  Memory Limit: 128 MB Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: ...

  9. BZOJ 4066 简单题 ——KD-Tree套替罪羊树

    [题目分析] 直接x,y二维轮番划分,暴力即可. 套上替罪羊,打碎重构,对于时间复杂度有了保证. 写起来好麻烦,重构的技巧很棒! [代码] #include <cstdio> #inclu ...

随机推荐

  1. Linux--NiaoGe-Service-05

    1.设置网络参数的命令 命令名称 作用 ifconfig 查询.设置网卡与IP网络等相关参数 ifup.ifdown 启动.关闭网络接口 route 查看配置路由表(route table) ip 整 ...

  2. game 竞赛图 缩环

    [问题背景] zhx 和他的妹子(们)做游戏. [问题描述] 考虑 N 个人玩一个游戏, 任意两个人之间进行一场游戏 (共 N*(N-)/ 场) , 且每场一定能分出胜负. 现在,你需要在其中找到三个 ...

  3. 关于Pre-bound JDBC Connection found! HibernateTransactionManager does not 异常小结

    昨天帮女朋友配置ssh框架的多数据源, 本以为对此已经很熟悉,配置完其他的错倒是还能接受,调了一下就好了.  唯独 Pre-bound JDBC Connection found! Hibernate ...

  4. 2019/05/11 JAVA虚拟机原理

    所谓虚拟机,就是一台虚拟的机器.他是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可以分为 系统虚拟机和程序虚拟机, 大名鼎鼎的Visual Box.Vmare就属于系统虚拟机,他们完全是对物理计 ...

  5. Docker快速构建Redis集群(cluster)

    Docker快速构建Redis集群(cluster) 以所有redis实例运行在同一台宿主机上为例子 搭建步骤 redis集群目录清单 . ├── Dockerfile ├── make_master ...

  6. FreeMusic项目优化(一)——flex布局学习记录

    参考博客:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html flex布局是w3c于09年提出的,用于简便,整洁,响应式地解决布局问题的手 ...

  7. 利用nodejs读取数据库数据生成树结构的json数据

    在做后台管理界面的时候,几乎少不了的一个结构就是树形结构,用来做菜单导航: 那么,最希望的就是树结构的所有数据都是读取的数据库,而不是直接代码当中写死,那我们就一步一步来看: 一,建表 字段通常包括: ...

  8. 洛谷 P1901 发射站

    题目描述 某地有 N 个能量发射站排成一行,每个发射站 i 都有不相同的高度 Hi,并能向两边(当 然两端的只能向一边)同时发射能量值为 Vi 的能量,并且发出的能量只被两边最近的且比 它高的发射站接 ...

  9. Exception in thread "main" java.lang.NoSuchMethodError: org.apache.http.entity.ContentType.withCharset(Ljava/lang/String;)Lorg/apache/http/entity/ContentType;

    解决方案是:第一点先检查一下使用的包是否冲突,是否是版本号一致.第二点是增加一个包 忙活了好久才解决了这个异常,小小的激动一下啊啊

  10. leecode 旋转数组

    描述 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋 ...