ACM竞赛问题,Quoit design,用Java语言编程,求大神解答!输入输出严格按照格式。没一个人会做。。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM竞赛问题,Quoit design,用Java语言编程,求大神解答!输入输出严格按照格式。没一个人会做。。相关的知识,希望对你有一定的参考价值。
Quoit Design
Time Limit : 10000/5000ms (Java/Other) Memory Limit : 65536/32768K
(Java/Other)
Total Submission(s) : 5 Accepted Submission(s) : 0
Font: Times New Roman |
Verdana | Georgia
Font Size: ← →
Problem Description
Have you ever played quoit in a playground? Quoit is a game in
which flat rings are pitched at some toys, with all the toys encircled
awarded.
In the field of Cyberground, the position of each toy is fixed, and
the ring is carefully designed so it can only encircle one toy at a time. On the
other hand, to make the game look more attractive, the ring is designed to have
the largest radius. Given a configuration of the field, you are supposed to find
the radius of such a ring.
Assume that all the toys are points on a
plane. A point is encircled by the ring if the distance between the point and
the center of the ring is strictly less than the radius of the ring. If two toys
are placed at the same point, the radius of the ring is considered to be
0.
Input
The input consists of several test cases. For each case, the
first line contains an integer N (2 <= N <= 100,000), the total number of
toys in the field. Then N lines follow, each contains a pair of (x, y) which are
the coordinates of a toy. The input is terminated by N = 0.
Output
For each test case, print in one line the radius of the ring
required by the Cyberground manager, accurate up to 2 decimal places.
Sample Input
2
0 0
1 1
2
1 1
1 1
3
-1.5 0
0 0
0 1.5
0
Sample Output
0.71
0.00
0.75
(ACM题目最好百度“HDU 1007”查找别人在博客中写的题解,比较详细,期待这里有高质量的回答貌似不现实。。。给你个链接:
http://www.cnblogs.com/kuangbin/archive/2012/03/13/2393922.html ---kuangbin大神的
http://blog.csdn.net/hellobabygogo3/article/details/8042650 ----这篇也不错) 参考技术A 能翻译成中文么!追问
能翻译成中文我自己也许就做出来啦。
HD-ACM算法专攻系列(15)——Quoit Design
问题描述:
源码:
经典问题——最近邻问题,标准解法
#include"iostream" #include"algorithm" #include"cmath" using namespace std; struct Point { double x; double y; }; Point S[100000];//不使用全局变量可能会超内存 bool cmpPointX(Point a, Point b) { return a.x > b.x; } bool cmpPointY(Point a, Point b) { return a.y > b.y; } double EfficientClosestPair(Point *P, Point *Q, int start, int n) { if(n <= 3) { double result; result = (P[start].x - P[start+1].x)*(P[start].x - P[start+1].x) + (P[start].y - P[start+1].y) * (P[start].y - P[start+1].y); if(n == 3) { double tmp = (P[start].x - P[start+2].x)*(P[start].x - P[start+2].x) + (P[start].y - P[start+2].y) * (P[start].y - P[start+2].y); if(tmp < result)result = tmp; tmp = (P[start+1].x - P[start+2].x)*(P[start+1].x - P[start+2].x) + (P[start+1].y - P[start+2].y) * (P[start+1].y - P[start+2].y); if(tmp < result)result = tmp; } return result; } else { int half = n / 2; double d1 = EfficientClosestPair(P, Q, start, half); double d2 = EfficientClosestPair(P, Q, start + half, n - half); double d = d1 < d2 ? d1 : d2; double m = P[start + half - 1].x; int count = 0; double tmp; for(int i = start; i < start + n; i++) { tmp = Q[i].x - m; if(tmp < 0)tmp = - tmp; if(tmp < d)count++; } double dminsq = d; if(count > 1) { //Point *S = new Point[count]; for(int i = start, j = 0; i < start + n; i++) { tmp = Q[i].x - m; if(tmp < 0)tmp = - tmp; if(tmp < d) { S[j].x = Q[i].x; S[j].y = Q[i].y; j++; } } int k; for(int i = 0; i < count - 1; i++) { k = i + 1; while(k < count && (S[k].y - S[i].y)*(S[k].y - S[i].y) < dminsq) { dminsq = min((S[k].x - S[i].x)*(S[k].x - S[i].x) + (S[k].y - S[i].y)*(S[k].y - S[i].y), dminsq); k++; } } } return dminsq; } } int main() { int n; Point *P, *Q; cout.precision(2); cout.setf(ios::fixed); P = new Point[100000]; Q = new Point[100000]; while(scanf("%d", &n) != EOF) { if(n == 0)break; for(int i = 0; i < n; i++) { scanf("%lf %lf", &P[i].x,&P[i].y); Q[i].x = P[i].x; Q[i].y = P[i].y; } if(n <= 3) { cout<<sqrt(EfficientClosestPair(P, Q, 0, n)) / 2<<endl; } else { sort(P, P+n, cmpPointX);//使用qsort可能会超时 sort(Q, Q+n, cmpPointY); cout<<sqrt(EfficientClosestPair(P, Q, 0, n)) / 2<<endl; } } return 0; }
以上是关于ACM竞赛问题,Quoit design,用Java语言编程,求大神解答!输入输出严格按照格式。没一个人会做。。的主要内容,如果未能解决你的问题,请参考以下文章
HD-ACM算法专攻系列(15)——Quoit Design