【编程之美挑战赛第一场】活动中心
来源:互联网 发布:java socketio client 编辑:程序博客网 时间:2024/04/30 09:52
时间限制:12000ms
单点时限:6000ms
内存限制:256MB
- 样例输入
131 12 23 3
- 样例输出
Case 1: 1.678787
描述
A市是一个高度规划的城市,但是科技高端发达的地方,居民们也不能忘记运动和锻炼,因此城市规划局在设计A市的时候也要考虑为居民们建造一个活动中心,方便居住在A市的居民们能随时开展运动,锻炼强健的身心。
城市规划局希望活动中心的位置满足以下条件:
1. 到所有居住地的总距离最小。
2. 为了方便活动中心的资源补给和其他器材的维护,活动中心必须建设在A市的主干道上。
为了简化问题,我们将A市摆在二维平面上,城市的主干道看作直角坐标系平的X轴,城市中所有的居住地都可以看成二维平面上的一个点。
现在,A市的城市规划局希望知道活动中心建在哪儿最好。
输入
第一行包括一个数T,表示数据的组数。
接下来包含T组数据,每组数据的第一行包括一个整数N,表示A市共有N处居住地
接下来N行表示每处居住地的坐标。
输出
对于每组数据,输出一行“Case X: Y”,其中X表示每组数据的编号(从1开始),Y表示活动中心的最优建造位置。我们建议你的输出保留Y到小数点后6位或以上,任何与标准答案的绝对误差或者相对误差在10-6以内的结果都将被视为正确。
数据范围
小数据:1 ≤ T ≤ 1000, 1 ≤ N ≤ 10
大数据:1 ≤ T ≤ 10, 1 ≤ N ≤ 105
对于所有数据,坐标值都是整数且绝对值都不超过106
样例解释
样例1:活动中心的最优建造位置为(1.678787, 0)
看了解题思路,三分查找,TT。。特点,求凹函数或者凸函数中的极值点,把公式带入距离,可以观察出总距离和其实是一个凹函数?具体的数学推导给不出,我是个数学渣渣。。
直接看java 代码吧
import java.text.DecimalFormat;import java.util.Arrays;import java.util.Scanner;import java.lang.String;import java.lang.Math;import java.util.HashSet;/*class TreeNode{int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; left = null; right = null;}}class ListNode{int val;ListNode next;ListNode(int x){val = x; next = null;}}*/public class Solution {static long mode = 1000000007;/*public static void permutation(char[] str, HashSet<String> hashset, int start, int end) {if (start == end) {hashset.add(new String(str));//sum++;}else {for (int i = start; i <= end; i++) {char tmp = str[start];str[start] = str[i];str[i] = tmp;permutation(str, hashset, start+1, end); tmp = str[start];str[start] = str[i];str[i] = tmp;}}}*/public static void main(String[] args) {int T ;Scanner jin = new Scanner(System.in);T = jin.nextInt();for(int i = 0; i < T; i++){int N = jin.nextInt();int[] x_array = new int[N];int[] y_array = new int[N];int minx = 1000000;int maxx = -100000;for (int j = 0; j < N; j++) {x_array[j] = jin.nextInt();y_array[j] = jin.nextInt();if (x_array[j] < minx) {minx = x_array[j];}if (x_array[j] > maxx) {maxx = x_array[j];}}double lo = minx;double hi = maxx;while ((hi-lo) >= 1e-7) {double mid = (lo+hi)/2;double mmid = (mid+hi)/2;double f1 = distance(mid, x_array, y_array);double f2 = distance(mmid, x_array, y_array);if (f1 < f2) {hi = mmid;}else lo = mid;}DecimalFormat df = new DecimalFormat("0.000000");System.out.println("Case " + i + ": " + df.format(lo));}}public static double distance(double x, int[] x_array, int[] y_array) {double dist = 0;for (int i = 0; i < x_array.length; i++) {dist += Math.sqrt((x-x_array[i])*(x-x_array[i]) + y_array[i]*y_array[i]);}return dist;}}
0 0
- 【编程之美挑战赛第一场】活动中心
- 编程之美初赛第一场 活动中心
- 编程之美初赛第一场 活动中心
- 编程之美初赛第一场 活动中心
- 编程之美初赛第一场 题目3 : 活动中心
- 编程之美 初赛第一场 题目3 : 活动中心
- 2014 编程之美 预赛第一场 活动中心 三分
- 2014年编程之美初赛第一场-活动中心
- 2014编程之美初赛第一场题目3 : 活动中心
- 【编程之美挑战赛第一场】焦距
- 【编程之美挑战赛第一场】树
- 编程之美挑战赛初赛第一场题目1
- 微软2014编程之美初赛第一场——题目3 : 活动中心
- 编程之美2014初赛第一场——活动中心(2014.4.19)
- 2014微软编程之美初赛第一场第三题 活动中心
- 编程之美 活动中心
- 编程之美挑战赛出赛第二场
- 编程之美-活动中心(三分)
- java实现通过samba上传和下载文件
- 微软2014实习生电话一面总结
- matlab的figure与java swing不兼容
- Wikipedia上面关于Method stub的说明
- NYOJ74小学生算术
- 【编程之美挑战赛第一场】活动中心
- .NET微信开放平台-笔记
- 一些个好用的vs插件
- java的几种对象(PO,VO,DAO,BO,POJO)解释
- 数据库集群日期设置出现的错误
- Oracle Join机制
- vector用法
- poj 1976 A Mini Locomotive_简单dp
- css/javaScript基础