USACO6.4-Electric Fences:计算几何
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:计算几何的更多相关文章
- 洛谷P2735 电网 Electric Fences
P2735 电网 Electric Fences 11通过 28提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 在本题中,格点是 ...
- USACO 6.4 Electric Fences
Electric FencesKolstad & Schrijvers Farmer John has decided to construct electric fences. He has ...
- 洛谷 P2735 电网 Electric Fences Label:计算几何--皮克定理
题目描述 在本题中,格点是指横纵坐标皆为整数的点. 为了圈养他的牛,农夫约翰(Farmer John)建造了一个三角形的电网.他从原点(0,0)牵出一根通电的电线,连接格点(n,m)(0<=n& ...
- LuoGu P2735 电网 Electric Fences
题目传送门 这个东西,本来我是用求出两条一次函数解析式然后判断在x坐标下的y坐标值来做的 首先因为没考虑钝角三角形,WA了 然后又因为精度处理不好又WA了 一气之下,只能去网上查了查那个皮克定理 首先 ...
- luoguP2735 电网 Electric Fences
一道校内模拟赛遇见的题 ** 不会正解就真的很麻烦的 数学题 ** 有一种东西叫 皮克定理 发现的千古神犇: 姓名:George Alexander Pick(所以叫皮克定理呀 国籍:奥地利(蛤!竟然 ...
- USACO 6.4 章节
The Primes 题目大意 5*5矩阵,给定左上角 要所有行,列,从左向右看对角线为质数,没有前导零,且这些质数数位和相等(题目给和) 按字典序输出所有方案... 题解 看上去就是个 无脑暴搜 题 ...
- USACO 完结的一些感想
其实日期没有那么近啦……只是我偶尔还点进去造成的,导致我没有每一章刷完的纪念日了 但是全刷完是今天啦 讲真,题很锻炼思维能力,USACO保持着一贯猎奇的题目描述,以及尽量不用高级算法就完成的题解……例 ...
- USACO6.5-Closed Fences:计算几何
Closed Fences A closed fence in the plane is a set of non-crossing, connected line segments with N c ...
- 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 ...
随机推荐
- Android常用ProgressDialog设置
public static ProgressDialog initDialog(Context context) { ProgressDialog progressDialog = new Progr ...
- 1033 - Merging Maps
Pictures taken from an airplane or satellite of an ar ea to be mapped are often of sufficiently high ...
- [ES6] Object.assign (with defaults value object)
function spinner(target, options = {}){ let defaults = { message: "Please wait", spinningS ...
- "蓝筹"如何使程序猿?
"蓝筹"这个词可能不是很多人知道这意味着什么.我会来普及知识.这是最重要的概念是指"越来越从长远来看更有价值"的含义.作为一个程序猿,我想你想使自己通过实际行动 ...
- android Json解析详解
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语 言的支持),从而可以在不同平台间进行数 ...
- 简单dp ---HDU3485 Count 101
题目大意:让求长度为n的0 和 1 构成的串中不包含101子串的个数有多少. 这个题当时想了好久,以为是一个规律题,一直在推规律,最后还是wa了,上网一看原来是dp问题, 不过确实递推式挺巧妙的. 递 ...
- GraphViz web版
http://graphviz-dev.appspot.com/ 用来把dot语言的图画出来,很多地方用dot语言来画图,比如doxygen的类关系,gperftools的分析结果等.
- 自定义控件 TextView 歌词 Lrc
演示 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> < ...
- ASP.NET-FineUI开发实践-9
用了FineUI有一段时间了,还是分享下我咋改的吧,没想的那么难,我也是从小白来的. 基础是要懂JQ和EXTJS,主要是要懂JQ和EXTJS能干啥,这里有两个网站 http://www.w3schoo ...
- ExecuteNonQuary接收存储过程的输出类型的变量的值
1.设置所调用的存储过程需要的参数 public decimal CreateOrder(string orderId, int userId, string address) { SqlParame ...