题目大意:

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

题解:

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

对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. JAVA常用知识总结(十三)——数据库(三)

    Mysql的主键选择(主键自增,UUID,snowflake)? 使用自增长做主键的优点:1.很小的数据存储空间2.性能最好3.容易记忆使用自增长做主键的缺点:1.如果存在大量的数据,可能会超出自增长 ...

  2. JAVA本地项目手机访问

    http://192.168.40.56:7082/carloan/#newOrderView ipconfig  找到本地ip,然后把localhost改成本地ip就行

  3. android开发学习 ------- 【转】 android中的线程池

    线程很常见 , https://blog.csdn.net/seu_calvin/article/details/52415337    参考,保证能看懂.

  4. 编译运行第一个Java程序——通过示例学习Java编程3

    作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=13 在本教程中,我们将了解如何编写.编译和运行Ja ...

  5. hihocoder1822 战舰日常任务

    思路: 使用堆即可. 实现: #include <iostream> #include <map> #include <vector> #include <c ...

  6. HDU 1561 The more, The Better (树形DP,常规)

    题意:给一个森林,n个节点,每个点有点权,问若从中刚好选择m个点(选择某点之前必须先选择了其父亲),使得这m个点权之和最大为多少? 思路: 比较常规.就是DFS一次,枚举在子树中可能选择的k个点(注意 ...

  7. (五)mybatis之下载与基本构成

    1.  下载MyBatis. 输入网址:https://github.com/mybatis/mybatis-3/releases 进入Mybatis下载页面,选择第一个选项,然后就可以加载到myba ...

  8. leetcode_1095. Find in Mountain Array_[Binary Search]

    https://leetcode.com/problems/find-in-mountain-array/ 题意:给定一个MountainArray(定义见题目),找到其中最早出现的target值的下 ...

  9. iPhone Tutorials

    http://www.raywenderlich.com/tutorials This site contains a ton of fun written tutorials – so many t ...

  10. BestCoder Round#15 1002-Instruction

    http://acm.hdu.edu.cn/showproblem.php?pid=5083 官方题解——> 1002 Instruction 先考虑编码,首先找到operation对应的编码, ...