题目大意:

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

题解:

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

对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系统任务调度命令crontab

    循环重复的执行计划任务.有计划性的执行任务,像这种任务,在linux系统中就有cron命令来完成. linux系统下的任务调度分为两类:系统任务调度和用户任务调度. /etc/crontab文件就是系 ...

  2. 类加载机制 + Classloader.loadClass(String name)和Class.forName(String name)

    Classloader.loadClass(String name)和Class.forName(String name)的区别 Java的类在jvm中的加载大致分为加载,链接或者叫link(里面包含 ...

  3. 080 Remove Duplicates from Sorted Array II 从排序阵列中删除重复 II

    “删除重复项目” 的进阶:如果重复最多被允许两次,又该怎么办呢?例如:给定排序数列 nums = [1,1,1,2,2,3]你的函数应该返回长度为 5,nums 的前五个元素是 1, 1, 2, 2 ...

  4. IE如何实现text-shadow文字阴影效果呢?

    让我们头痛的是IE是不支持text-shadow效果,但为了在兼容这一问题,我们只好使用滤镜filter:shadow来处理(本人不提倡使用滤镜).filter:shadow滤镜作用与dropshad ...

  5. echarts 添加Loading 等待。

    capturedsDetailsEcharts: function(id) { if (!id) { id = mini.get("chnNameCaptureds").getVa ...

  6. this详解,对执行上下文说 Yes

    this 指向多变,很多隐蔽的 bug 都缘于它.与此同时,this 强大灵活,如果能熟练驾驭,就会写出更简洁.优雅的代码. 社区上对于 this 的讲解虽然不少,但缺乏统一梳理. this 相关知识 ...

  7. 浏览器详谈及其内部工作机制 —— web开发必读

    浏览器介绍 如今,浏览器格局基本上是五分天下,分别是:IE.Firefox.Safari.Chrome.Opera,而浏览器引擎就更加集中了,主要是四大巨头:IE的浏览器排版引擎Trident,目前随 ...

  8. PostgreSQL函数如何返回数据集 [转]

    PostgreSQL函数如何返回数据集 以下主要介绍PostgreSQL函数/存储过程返回数据集,或者也叫结果集的示例. 背景: PostgreSQL里面没有存储过程,只有函数,其他数据库里的这两个对 ...

  9. IE浏览器兼容background-size

    background-size是CSS3新增的属性,IE8以下不支持,通过滤镜实现background-size效果 background-size:contain; // 缩小图片来适应元素的尺寸( ...

  10. Open edX 配置 O365 SMTP

    配置LMS/Studio SMTP: 用到的文件如下:以下设置采用的root用户进行 /edx/app/edxapp/lms.env.json #|env文件 里包含一些功能开关 /edx/app/e ...