BZOJ 2508: 简单题
题目大意:
加入直线,删除直线,求点到所有直线的距离的平方和。
题解:
把点到直线的距离公式写出来,然后展开。维护六个值,计算一个二元的多项式的最小值。
对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: 简单题的更多相关文章
- bzoj 2508: 简单题【拉格朗日乘数法】
大概是对于f(x,y)求min,先把x看成常数,然后得到关于y的一元二次方程,然后取一元二次极值把y用x表示,再把x作为未知数带回去化简,最后能得到一个一元二次的式子,每次修改这个式子的参数即可. 智 ...
- BZOJ 2683: 简单题
2683: 简单题 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 913 Solved: 379[Submit][Status][Discuss] ...
- bzoj 4066: 简单题 kd-tree
4066: 简单题 Time Limit: 50 Sec Memory Limit: 20 MBSubmit: 234 Solved: 82[Submit][Status][Discuss] De ...
- BZOJ 3687: 简单题 bitset
3687: 简单题 Time Limit: 10 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 小呆开始研究集合论了,他 ...
- BZOJ 2683: 简单题(CDQ分治 + 树状数组)
BZOJ2683: 简单题(CDQ分治 + 树状数组) 题意: 你有一个\(N*N\)的棋盘,每个格子内有一个整数,初始时的时候全部为\(0\),现在需要维护两种操作: 命令 参数限制 内容 \(1\ ...
- BZOJ 2683: 简单题 [CDQ分治]
同上题 那你为什么又发一个? 因为我用另一种写法又写了一遍... 不用排序,$CDQ$分治的时候归并排序 快了1000ms... #include <iostream> #include ...
- BZOJ 2683 简单题 cdq分治+树状数组
题意:链接 **方法:**cdq分治+树状数组 解析: 首先对于这道题,看了范围之后.二维的数据结构是显然不能过的.于是我们可能会考虑把一维排序之后还有一位上数据结构什么的,然而cdq分治却可以非常好 ...
- BZOJ 2683: 简单题(CDQ 分治)
题面 Time Limit: 50 Sec Memory Limit: 128 MB Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: ...
- BZOJ 4066 简单题 ——KD-Tree套替罪羊树
[题目分析] 直接x,y二维轮番划分,暴力即可. 套上替罪羊,打碎重构,对于时间复杂度有了保证. 写起来好麻烦,重构的技巧很棒! [代码] #include <cstdio> #inclu ...
随机推荐
- JAVA常用知识总结(十三)——数据库(三)
Mysql的主键选择(主键自增,UUID,snowflake)? 使用自增长做主键的优点:1.很小的数据存储空间2.性能最好3.容易记忆使用自增长做主键的缺点:1.如果存在大量的数据,可能会超出自增长 ...
- JAVA本地项目手机访问
http://192.168.40.56:7082/carloan/#newOrderView ipconfig 找到本地ip,然后把localhost改成本地ip就行
- android开发学习 ------- 【转】 android中的线程池
线程很常见 , https://blog.csdn.net/seu_calvin/article/details/52415337 参考,保证能看懂.
- 编译运行第一个Java程序——通过示例学习Java编程3
作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=13 在本教程中,我们将了解如何编写.编译和运行Ja ...
- hihocoder1822 战舰日常任务
思路: 使用堆即可. 实现: #include <iostream> #include <map> #include <vector> #include <c ...
- HDU 1561 The more, The Better (树形DP,常规)
题意:给一个森林,n个节点,每个点有点权,问若从中刚好选择m个点(选择某点之前必须先选择了其父亲),使得这m个点权之和最大为多少? 思路: 比较常规.就是DFS一次,枚举在子树中可能选择的k个点(注意 ...
- (五)mybatis之下载与基本构成
1. 下载MyBatis. 输入网址:https://github.com/mybatis/mybatis-3/releases 进入Mybatis下载页面,选择第一个选项,然后就可以加载到myba ...
- leetcode_1095. Find in Mountain Array_[Binary Search]
https://leetcode.com/problems/find-in-mountain-array/ 题意:给定一个MountainArray(定义见题目),找到其中最早出现的target值的下 ...
- iPhone Tutorials
http://www.raywenderlich.com/tutorials This site contains a ton of fun written tutorials – so many t ...
- BestCoder Round#15 1002-Instruction
http://acm.hdu.edu.cn/showproblem.php?pid=5083 官方题解——> 1002 Instruction 先考虑编码,首先找到operation对应的编码, ...