首页 > 代码库 > BestCoder4——Miaomiao's Geometry(水题。不知道放什么分类)
BestCoder4——Miaomiao's Geometry(水题。不知道放什么分类)
Miaomiao‘s Geometry
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 10 Accepted Submission(s): 3
Problem Description
There are N point on X-axis . Miaomiao would like to cover them ALL by using segments with same length. There are 2 limits: 1.A point is convered if there is a segments T , the point is the left end or the right end of T. 2.The length of the intersection of any two segments equals zero. For example , point 2 is convered by [2 , 4] and not convered by [1 , 3]. [1 , 2] and [2 , 3] are legal segments , [1 , 2] and [3 , 4] are legal segments , but [1 , 3] and [2 , 4] are not (the length of intersection doesn‘t equals zero), [1 , 3] and [3 , 4] are not(not the same length). Miaomiao wants to maximum the length of segements , please tell her the maximum length of segments. For your information , the point can‘t coincidently at the same position.
Input
There are several test cases. There is a number T ( T <= 50 ) on the first line which shows the number of test cases. For each test cases , there is a number N ( 3 <= N <= 50 ) on the first line. On the second line , there are N integers Ai (-1e9 <= Ai <= 1e9) shows the position of each point.
Output
For each test cases , output a real number shows the answser. Please output three digit after the decimal point.
Sample Input
3 3 1 2 3 3 1 2 4 4 1 9 100 10
Sample Output
1.000 2.000 8.000HintFor the first sample , a legal answer is [1,2] [2,3] so the length is 1. For the second sample , a legal answer is [-1,1] [2,4] so the answer is 2. For the thired sample , a legal answer is [-7,1] , [1,9] , [10,18] , [100,108] so the answer is 8.
AC代码:
#include <iostream> #include <stdio.h> #include <string.h> #include <vector> #include <map> #include <algorithm> #include <queue> #include <cmath> #define INF 0xffffff #define lln long long #ifdef ONLINE_JUDGE #define FOI(file) 0 #define FOW(file) 0 #else #define FOI(file) freopen(file,"r",stdin); #define FOW(file) freopen(file,"w",stdout); #endif using namespace std; struct Node { int n; bool operator < (const Node &a) const { return n < a.n; } }; int n; #define MAXN 51 int a[MAXN]; int main() { //FOI("input"); //FOW("output"); //write your programme here int i, j, k; int t, pre; int n, len; Node temp; priority_queue <Node> q; scanf("%d", &t); while(t--) { scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a[i]); sort(a, a+n); for(i = 0; i < n-1; i++) { len = a[i+1] - a[i]; temp.n = len; q.push(temp); } pre = 0; bool done = false; while(!q.empty()) { while(pre == q.top().n) { q.pop(); } pre = q.top().n; q.pop(); for(i = 1; i < n; i++) { if(a[i] - a[i-1] >= pre) { done = true; continue; } else { if(i != 1 && i != n-1) { bool x = a[i-1] - a[i-2] >= pre; bool y = a[i+1] - a[i] >= pre; if(x && y) { done = true; continue; } done = false; break; } else { if(i == 1 && a[i+1] - a[i] >= pre) { done = true; continue; } else if(i == n-1 && a[i-1] - a[i-2] >= pre) { done = true; continue; } done = false; break; } } } if(done) break; } while(!q.empty()) q.pop(); double s = pre; printf("%.3f\n", s); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。