1038: [ZJOI2008]瞭望塔
半平面交。
半平面指的就是一条直线的左面(也不知道对不对)
半平面交就是指很多半平面的公共部分。
这道题的解一定在各条直线的半平面交中。
而且瞭望塔只可能在各个点或者半平面交折线的拐点处。
求出半平面交,枚举即可。
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #include<cmath>
- #define eps 1e-7
- using namespace std;
- const int maxn = 300 + 10;
- struct Point {
- double x,y;
- }p[maxn],t;
- struct Line {
- double k,b;
- void init(Point p1,Point p2) {
- k=(p1.y-p2.y)/(p1.x-p2.x);
- b=p2.y-k*p2.x;
- }
- }l[maxn],s[maxn];
- int n,sp;
- double res=1e11;
- bool cmp(Line x,Line y) {
- if(abs(x.k-y.k)<eps) return x.b<y.b;
- return x.k<y.k;
- }
- Point inter(Line l1,Line l2) {
- Point res;
- res.x=(l2.b-l1.b)/(l1.k-l2.k);
- res.y=l1.k*res.x+l1.b;
- return res;
- }
- void push(Line l) {
- while(sp>=2 && inter(s[sp],l).x < inter(s[sp-1],s[sp]).x) sp--;
- s[++sp]=l;
- }
- double f(double x) {
- double res=0;
- for(int i=1;i<=sp;i++) res=max(res,s[i].k*x+s[i].b);
- return res;
- }
- double g(double x) {
- int i;
- for(i=n;i&&x<p[i].x;i--);
- return p[i].y+(x-p[i].x)/(p[i+1].x-p[i].x)*(p[i+1].y-p[i].y);
- }
- int main() {
- scanf("%d",&n);
- for(int i=1;i<=n;i++) scanf("%lf",&p[i].x);
- for(int i=1;i<=n;i++) scanf("%lf",&p[i].y);
- for(int i=1;i<n;i++) l[i].init(p[i],p[i+1]);
- sort(l+1,l+n,cmp);
- for(int i=1;i<n;i++) if(i==n-1 || abs(l[i].k-l[i+1].k)>eps) push(l[i]);
- for(int i=1;i<=n;i++) res=min(res,f(p[i].x)-p[i].y);
- for(int i=1;i<sp;i++) {
- t=inter(s[i],s[i+1]);
- res=min(res,t.y-g(t.x));
- }
- printf("%.3lf\n",res);
- return 0;
- }
1038: [ZJOI2008]瞭望塔的更多相关文章
- 【BZOJ 1038】 1038: [ZJOI2008]瞭望塔
1038: [ZJOI2008]瞭望塔 Description 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如下图所示 ...
- 1038: [ZJOI2008]瞭望塔 - BZOJ
Description 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如下图所示 我们可以用一条山的上方轮廓折线(x1, ...
- 【BZOJ】1038: [ZJOI2008]瞭望塔
http://www.lydsy.com/JudgeOnline/problem.php?id=1038 题意:给出n个x轴各不相同的二维整点,且升序,n<=300,坐标绝对值<=10^6 ...
- bzoj 1038 [ZJOI2008]瞭望塔(半平面交)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1038 [题意] 找一个最低塔高使可以看到村庄的每一个角落. [思路] 半平面交 能够看 ...
- BZOJ 1038 ZJOI2008 瞭望塔 半平面交
题目大意及模拟退火题解:见 http://blog.csdn.net/popoqqq/article/details/39340759 这次用半平面交写了一遍--求出半平面交之后.枚举原图和半平面交的 ...
- bzoj千题计划126:bzoj1038: [ZJOI2008]瞭望塔
http://www.lydsy.com/JudgeOnline/problem.php?id=1038 本题可以使用三分法 将点按横坐标排好序后 对于任意相邻两个点连成的线段,瞭望塔的高度 是单峰函 ...
- [BZOJ1038][ZJOI2008]瞭望塔(半平面交)
1038: [ZJOI2008]瞭望塔 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2999 Solved: 1227[Submit][Statu ...
- 【BZOJ1038】[ZJOI2008]瞭望塔 半平面交
[BZOJ1038][ZJOI2008]瞭望塔 Description 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如 ...
- 【BZOJ 1038】[ZJOI2008]瞭望塔
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1038 [题意] [题解] 可以看到所有村子的瞭望塔所在的位置只会是在相邻两个村子所代表 ...
随机推荐
- Codeforces Round #247 (Div. 2) C题
赛后想了想,然后就过了.. 赛后....... 我真的很弱啊!想那么多干嘛? 明明知道这题的原型就是求求排列数,这不就是 (F[N]-B[N]+100000007)%100000007: F[N]是1 ...
- URAL题解—不断跟新中
1014:简单题,忘了0的情况可以是10,== 1219:找呀找规律,满足N*(N-1)/2+1=X;就是1 的情况了
- 从maya导入物体 Importing Objects From Maya
原地址:http://game.ceeger.com/Manual/HOWTO-ImportObjectMaya.html Unity natively imports Maya files. To ...
- 解决vsftpd日志时间问题
解决vsftpd日志时间问题 发布时间:August 29, 2008 分类:Linux <你必须承认土也是一种艺术> <Linux下查看Apache的请求数> 最近发现vsf ...
- CAP定理与RDBMS的ACID
一.分布式领域CAP理论 CAP定理指在设计分布式系统时,一致性(Consistent).可用性(Availability).可靠性(分区容忍性Partition Tolerance)三个属性不可能同 ...
- POJ1811 Prime Test(miller素数判断&&pollar_rho大数分解)
http://blog.csdn.net/shiyuankongbu/article/details/9202373 发现自己原来的那份模板是有问题的,而且竟然找不出是哪里的问题,所以就用了上面的链接 ...
- POJ 2186
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 22189 Accepted: 9076 Des ...
- POJ 1458
#include <iostream> #include <string> #define MAXN 1000 using namespace std; string s_1; ...
- HDU 1026 Ignatius and the Princess I (BFS)
题目链接 题意 : 从(0,0)点走到(N-1,M-1)点,问最少时间. 思路 : BFS..... #include <stdio.h> #include <string.h> ...
- UVA 11481 - Arrange the Numbers 数学
Consider this sequence {1, 2, 3, . . . , N}, as a initial sequence of first N natural numbers. You ca ...