Electric Fences
Kolstad & Schrijvers

Farmer John has decided to construct electric fences. He has
fenced his fields into a number of bizarre shapes and now must find
the optimal place to locate the electrical supply to each of the
fences.

A single wire must run from some point on each and every fence
to the source of electricity. Wires can run through other fences
or across other wires. Wires can run at any angle. Wires can run
from any point on a fence (i.e., the ends or anywhere in between)
to the electrical supply.

Given the locations of all F (1 <= F <= 150) fences (fences
are always parallel to a grid axis and run from one integer gridpoint
to another, 0 <= X,Y <= 100), your program must calculate
both the total length of wire required to connect every fence to
the central source of electricity and also the optimal location for
the electrical source.

The optimal location for the electrical source might be anywhere
in Farmer John's field, not necessarily on a grid point.

PROGRAM NAME: fence3

INPUT FORMAT

The first line contains F, the number of fences.
F subsequent
lines each contain two X,Y pairs each of which denotes the endpoints
of a fence.

SAMPLE INPUT (file fence3.in)

3
0 0 0 1
2 0 2 1
0 3 2 3

OUTPUT FORMAT

On a single line, print three space-separated floating point numbers, each with a single decimal place. Presume that your computer's output library will round the number correctly.

The three numbers are:

  • the X value of the optimal location for the electricity,
  • the Y value for the optimal location for the electricity, and
  • the total (minimum) length of the wire required.

SAMPLE OUTPUT (file fence3.out)

1.0 1.6 3.7


题意:给出N条平行于坐标轴的线段,要求一点,使得该点到所有线段之和最小。

由于精度要求很低,只要保留一位小数,所以可以随便乱搞,我就是在整数范围内先暴力找到一个满足题意的点,然后在x±1,y±1范围内暴力找到小数点后一位,最坏的情况需要暴力100*100*150,也是完全可以承受的。

暴力小数位的时候要注意精度问题,另外三分搜索也可以做。

Executing...
   Test 1: TEST OK [0.014 secs, 3380 KB]
   Test 2: TEST OK [0.016 secs, 3380 KB]
   Test 3: TEST OK [0.049 secs, 3380 KB]
   Test 4: TEST OK [0.024 secs, 3380 KB]
   Test 5: TEST OK [0.070 secs, 3380 KB]
   Test 6: TEST OK [0.046 secs, 3380 KB]
   Test 7: TEST OK [0.043 secs, 3380 KB]
   Test 8: TEST OK [0.051 secs, 3380 KB]
   Test 9: TEST OK [0.057 secs, 3380 KB]
   Test 10: TEST OK [0.046 secs, 3380 KB]
   Test 11: TEST OK [0.049 secs, 3380 KB]
   Test 12: TEST OK [0.076 secs, 3380 KB] All tests OK.
 /*
LANG:C++
TASK:fence3
*/ #include <iostream>
#include <cmath>
#include <stdio.h>
using namespace std;
#define X first
#define Y second typedef pair<double,double> Point;
int n; struct Fence
{
Point p1;
Point p2;
}fences[]; double dist_point(Point p1,Point p2)
{
return sqrt((double)(p1.X-p2.X)*(p1.X-p2.X)+(p1.Y-p2.Y)*(p1.Y-p2.Y));
} bool isIn(Fence f,Point p)
{
if(f.p1.X==f.p2.X) // 垂直方向
return f.p1.Y<=p.Y && p.Y<=f.p2.Y;
if(f.p1.Y==f.p2.Y) // 水平方向
return f.p1.X<=p.X && p.X<=f.p2.X;
} // 计算p点到各篱笆的距离
double dist(Point p)
{
double ans=;
for(int i=;i<n;i++)
{
if(isIn(fences[i],p))
{
if(fences[i].p1.X==fences[i].p2.X) // 垂直方向
{
ans+=fabs((double)p.X-fences[i].p1.X);
}
else
{
ans+=fabs((double)p.Y-fences[i].p1.Y);
}
}
else
{
ans+=min(dist_point(p,fences[i].p1),dist_point(p,fences[i].p2));
}
}
return ans;
} int main()
{
freopen("fence3.in","r",stdin);
freopen("fence3.out","w",stdout); cin>>n;
for(int i=;i<n;i++)
{
scanf("%lf %lf %lf %lf",&fences[i].p1.X,&fences[i].p1.Y,&fences[i].p2.X,&fences[i].p2.Y);
} Point p;
double d=1e100; for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
if(d>dist(Point((double)i,(double)j)))
{
p=Point((double)i,(double)j);
d=dist(Point((double)i,(double)j));
}
} Point p2=p;
p2.X-=;
p2.Y-=;
Point ans;
for(;p2.X<=p.X+;p2.X+=0.1)
for(p2.Y=p.Y-;p2.Y<=p.Y+;p2.Y+=0.1)
{
if(d>=dist(p2)-1e-)
{
ans=p2;
d=dist(p2);
}
} printf("%.1f %.1f %.1f\n",ans.X,ans.Y,d); return ;
}
												

USACO6.4-Electric Fences:计算几何的更多相关文章

  1. 洛谷P2735 电网 Electric Fences

    P2735 电网 Electric Fences 11通过 28提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 在本题中,格点是 ...

  2. USACO 6.4 Electric Fences

    Electric FencesKolstad & Schrijvers Farmer John has decided to construct electric fences. He has ...

  3. 洛谷 P2735 电网 Electric Fences Label:计算几何--皮克定理

    题目描述 在本题中,格点是指横纵坐标皆为整数的点. 为了圈养他的牛,农夫约翰(Farmer John)建造了一个三角形的电网.他从原点(0,0)牵出一根通电的电线,连接格点(n,m)(0<=n& ...

  4. LuoGu P2735 电网 Electric Fences

    题目传送门 这个东西,本来我是用求出两条一次函数解析式然后判断在x坐标下的y坐标值来做的 首先因为没考虑钝角三角形,WA了 然后又因为精度处理不好又WA了 一气之下,只能去网上查了查那个皮克定理 首先 ...

  5. luoguP2735 电网 Electric Fences

    一道校内模拟赛遇见的题 ** 不会正解就真的很麻烦的 数学题 ** 有一种东西叫 皮克定理 发现的千古神犇: 姓名:George Alexander Pick(所以叫皮克定理呀 国籍:奥地利(蛤!竟然 ...

  6. USACO 6.4 章节

    The Primes 题目大意 5*5矩阵,给定左上角 要所有行,列,从左向右看对角线为质数,没有前导零,且这些质数数位和相等(题目给和) 按字典序输出所有方案... 题解 看上去就是个 无脑暴搜 题 ...

  7. USACO 完结的一些感想

    其实日期没有那么近啦……只是我偶尔还点进去造成的,导致我没有每一章刷完的纪念日了 但是全刷完是今天啦 讲真,题很锻炼思维能力,USACO保持着一贯猎奇的题目描述,以及尽量不用高级算法就完成的题解……例 ...

  8. USACO6.5-Closed Fences:计算几何

    Closed Fences A closed fence in the plane is a set of non-crossing, connected line segments with N c ...

  9. USACO 6.5 Closed Fences

    Closed Fences A closed fence in the plane is a set of non-crossing, connected line segments with N c ...

随机推荐

  1. 第一章 工欲善其事 必先利其器—Android SDK工具(3)

    1.3没有真机一样开发--Android模拟器 有些时候,我们手头上可能并没有符合要求的Android设备.那么这时候我们是不是对调试或者开发就一筹莫展了呢?当然不是.由于我们有Android模拟器. ...

  2. [Angular 2] Mapping Streams to Values to Affect State

    While you have multiple streams flowing into your scan operator, you'll need to map each stream to t ...

  3. 百练2755 奇妙的口袋 【深搜】or【动规】or【普通递归】or【递推】

    总Time Limit:  10000ms  Memory Limit:  65536kB 有一个奇妙的口袋.总的容积是40,用这个口袋能够变出一些物品,这些物品的整体积必须是40.John如今有n个 ...

  4. session过期后自动跳转到登陆页

    项目需要做一个自动登出的功能,查询了网上的资料,一开始准备用session监听做,按照下面方式配置监听器 1.在项目的web.xml文件中添加如下代码: <!--添加Session监听器--&g ...

  5. CentOS 7 修改hostname

    centOS 7 里面修改hostname的方式有所改变,修改/etc/hosts和/etc/sysconfig/network两个文件已经不能生效.使用的新命令是 : hostnamectl set ...

  6. ajax调用webservice(二) 跨域。

    所需工具与项目结构同(一). service.asmx中代码如下: using System; using System.Collections.Generic; using System.Web; ...

  7. 再谈Cookies欺骗

    在上一篇关于cookies欺骗的随笔中,提到的解决方案是把密码MD5加密之后存入cookies中,确实这种方法实现了效果,不过把密码留在客户端等待着去被破解不是一个合适的方法,在此也感谢 @老牛吃肉 ...

  8. SQL IN BETWEEN操作符

    IN 操作符 IN 操作符允许我们在 WHERE 子句中规定多个值. SQL IN 语法 SELECT column_name(s) FROM table_name WHERE column_name ...

  9. hdu1025 最长不下降子序列nlogn算法

    C - DP Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit I ...

  10. 分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)

    BOOL型变量:if(!var)    int型变量: if(var==0)    float型变量:    const float EPSINON = 0.00001;    if ((x > ...