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. HDU 2853 Assignment(KM最大匹配好题)

    HDU 2853 Assignment 题目链接 题意:如今有N个部队和M个任务(M>=N),每一个部队完毕每一个任务有一点的效率,效率越高越好.可是部队已经安排了一定的计划,这时须要我们尽量用 ...

  2. 转 [教程] Unity3D中角色的动画脚本的编写(二)

              在上一篇,我们介绍了有关Animation这个类中的部分方法,我后来想了想,这么介绍也不是个办法(其实有些方法我自己也没用过),该介绍点实际的东西了,毕竟我们是要做东西出来的.那好 ...

  3. java socker编程

    转自http://haohaoxuexi.iteye.com/blog/1979837 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户 ...

  4. Android TagFlowLayout完全解析 一款针对Tag的布局(转)

    一.概述 本文之前,先提一下关于上篇博文的100多万访问量请无视,博文被刷,我也很郁闷,本来想把那个文章放到草稿箱,结果放不进去,还把日期弄更新了,实属无奈. ok,开始今天的博文,今天要说的是Tag ...

  5. 大数据笔记05:大数据之Hadoop的HDFS(数据管理策略)

            HDFS中数据管理与容错 1.数据块的放置       每个数据块3个副本,就像上面的数据库A一样,这是因为数据在传输过程中任何一个节点都有可能出现故障(没有办法,廉价机器就是这样的) ...

  6. Android(java)学习笔记259:JNI之NDK开发步骤

    1. NDK开发步骤(回忆一下HelloWorld案例): (1)创建工程 (2)定义native方法 (3)创建jni文件夹 (4)创建c源文件放到jni文件夹 (5)拷贝jni.h头文件到jni目 ...

  7. yii 分页样式

    需求及效果图如下 没什么说的,就是修改分页,修改了CLinks分页的样式 上代码 <?php class GsearchPager extends CBasePager { const CSS_ ...

  8. IO-文件 File 复制 读写 总结

    一定要注意: 传入的参数,应该是包含文件名的完整路径名,不能把一个文件复制到[文件夹]中,因为[文件夹]本身是不能有输入输出流的,只能复制到一个[文件]中,否则会报异常. 以字节流读写的三种方式 pu ...

  9. JavaScript代码性能优化总结

    JavaScript 代码性能优化总结 尽量使用源生方法 javaScript是解释性语言,相比编译性语言执行速度要慢.浏览器已经实现的方法,就不要再去实现一遍了.另外,浏览器已经实现的方法在算法方面 ...

  10. shell 数组(in_array)

    if [[ ! "${array[@]}" =~ $val ]] ; then fi