2013编程之美全国挑战赛第二场-集会

昨天做编程之美的题感觉只有这一道是水题。思路没问题但是写程序写错了一个地方没AC。今天翻出来想了一下终于解决了。

解题思路:

要寻找的这个目标点的纵坐标为0,设横坐标为x。以示例数据为例,可以得到目标点到这些点的距离,更直观一点,绘制成图形点击查看。观察可知符合要求的点可能出现的位置是某两个抛物线的交点或者某个抛物线的顶点。求出这些点来比较计算出的距离,取最小的即可。没机会提交的代码如下:

import java.util.Scanner;  

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int T = in.nextInt();// T个测试
        for (int t = 0; t < T; t++) {
            int N = in.nextInt();
            int x[] = new int[N];
            int y[] = new int[N];
            for (int i = 0; i < N; i++) {
                x[i] = in.nextInt();
                y[i] = in.nextInt();
            }
            double min = Double.MAX_VALUE;
            double ret = 0;
            for (int i = 0; i < N; i++) {
                for (int j = i + 1; j < N; j++) {
                    double d = 0.5
                            * (sq(x[i]) - sq(x[j]) + sq(y[i]) - sq(y[j]))
                            / (x[i] - x[j]);
                    double res = calc(x, y, d);
                    if (res < min) {
                        min = res;
                        ret = d;
                    }
                }
            }
            for (int i = 0; i < N; i++) {
                double d = x[i];
                double res = calc(x, y, d);
                if (res < min) {
                    min = res;
                    ret = d;
                }
            }
            System.out.println("Case #" + (t + 1) + ": " + ret);
        }
    }  

    public static int sq(int x) {
        return x * x;
    }  

    public static double sq(double x) {
        return x * x;
    }  

    public static double calc(int[] x, int[] y, double d) {
        double max = 0.0;
        for (int i = 0; i < x.length; i++) {
            double temp = sq(x[i] - d) + sq(y[i]);
            if (temp > max)
                max = temp;
        }
        return max;
    }
}
时间: 2024-08-29 01:51:33

2013编程之美全国挑战赛第二场-集会的相关文章

2013编程之美全国挑战赛第一场-传话游戏

传话游戏 时间限制: 1000ms 内存限制: 256MB 描述 Alice和Bob还有其他几位好朋友在一起玩传话游戏.这个游戏是这样进行的:首先,所有游戏者按顺序站成一排,Alice站第一位,Bob站最后一位.然后,Alice想一句话悄悄告诉第二位游戏者,第二位游戏者又悄悄地告诉第三位,第三位又告诉第四位--以此类推,直到倒数第二位告诉Bob.两位游戏者在传话中,不能让其他人听到,也不能使用肢体动作来解释.最后,Bob把他所听到的话告诉大家,Alice也把她原本所想的话告诉大家. 由于传话过程

2013编程之美全国挑战赛第一场-树上的三角形

树上三角形 时间限制: 2000ms 内存限制: 256MB 描述 有一棵树,树上有只毛毛虫.它在这棵树上生活了很久,对它的构造了如指掌.所以它在树上从来都是走最短路,不会绕路.它还还特别喜欢三角形,所以当它在树上爬来爬去的时候总会在想,如果把刚才爬过的那几根树枝/树干锯下来,能不能从中选三根出来拼成一个三角形呢? 输入 输入数据的第一行包含一个整数 T,表示数据组数. 接下来有 T 组数据,每组数据中: 第一行包含一个整数 N,表示树上节点的个数(从 1 到 N 标号). 接下来的 N-1 行

2013编程之美全国挑战赛资格赛之传话游戏

时间限制: 1000ms 内存限制: 256MB 描述 Alice和Bob还有其他几位好朋友在一起玩传话游戏.这个游戏是这样进行的:首先,所有游戏者按顺序站成一排,Alice站第一位,Bob站最后一位.然后,Alice想一句话悄悄告诉第二位游戏者,第二位游戏者又悄悄地告诉第三位,第三位又告诉第四位--以此类推,直到倒数第二位告诉Bob.两位游戏者在传话中,不能让其他人听到,也不能使用肢体动作来解释.最后,Bob把他所听到的话告诉大家,Alice也把她原本所想的话告诉大家.  由于传话过程中可能出

2013编程之美资格赛之长方形(Java实现)

长方形 时间限制: 1000ms 内存限制: 256MB 描述 在 N 条水平线与 M 条竖直线构成的网格中,放 K 枚石子,每个石子都只能放在网格的交叉点上.问在最优的摆放方式下,最多能找到多少四边平行于坐标轴的长方形,它的四个角上都恰好放着一枚石子. 输入 输入文件包含多组测试数据. 第一行,给出一个整数T,为数据组数.接下来依次给出每组测试数据. 每组数据为三个用空格隔开的整数 N,M,K. 输出 对于每组测试数据,输出一行"Case #X: Y",其中X表示测试数据编号,Y表示

2013编程之美资格赛之树上的三角形(Java实现)

树上的三角形 时间限制: 2000ms 内存限制: 256MB 描述 有一棵树,树上有只毛毛虫.它在这棵树上生活了很久,对它的构造了如指掌.所以它在树上从来都是走最短路,不会绕路.它还还特别喜欢三角形,所以当它在树上爬来爬去的时候总会在想,如果把刚才爬过的那几根树枝/树干锯下来,能不能从中选三根出来拼成一个三角形呢? 输入 输入数据的第一行包含一个整数 T,表示数据组数. 接下来有 T 组数据,每组数据中: 第一行包含一个整数 N,表示树上节点的个数(从 1 到 N 标号). 接下来的 N-1

2013编程之美资格赛总结

终于可以完成一个程序比赛的题目了,虽然这次的时间有些长.这是第一次完成,感到真心不错.参加程序比赛是受舍友的影响,但很快就喜欢上了.但,从前不见第一次参加程序比赛--腾讯的编程马拉松,一个题不会,连提交代码的心思都没有.到第二次,参加百度的百度之星,百度之星参加了两次区域赛,第一次做的唯一一道题连题意都没有明白,结果不言而喻,失败:第二次区域赛,明白了题意,写出来代码,但提交结果还是失败,因为没有对于大数据进行思考.这就是参加的两次比赛的情况.这是第三次参加,是微软的编程之美,依据现在的结果,感

2013编程之美-测试赛

题目列表 > A + B 时间限制: 1000ms 内存限制: 1024MB 描述 输入两个正整数A和B, 求A+B的值 输入 两个正整数A, B 输出 A+B的和 对于小数据, 0 < A, B <= 10; 对于大数据, 0 < A, B <= 10100 样例输入 2 3 样例输出 5 #include<iostream> #include<cstring> using namespace std; int* strtoint(char *str

2013编程之美资格赛【传话游戏】

时间限制: 1000ms 内存限制: 256MB 描述 Alice和Bob还有其他几位好朋友在一起玩传话游戏.这个游戏是这样进行的:首先,所有游戏者按顺序站成一排,Alice站第一位,Bob站最后一位.然后,Alice想一句话悄悄告诉第二位游戏者,第二位游戏者又悄悄地告诉第三位,第三位又告诉第四位--以此类推,直到倒数第二位告诉Bob.两位游戏者在传话中,不能让其他人听到,也不能使用肢体动作来解释.最后,Bob把他所听到的话告诉大家,Alice也把她原本所想的话告诉大家.  由于传话过程中可能出

2013编程之美资格赛之传话游戏(Java实现)

传话游戏 时间限制: 1000ms 内存限制: 256MB 描述 Alice和Bob还有其他几位好朋友在一起玩传话游戏.这个游戏是这样进行的:首先,所有游戏者按顺序站成一排,Alice站第一位,Bob站最后一位.然后,Alice想一句话悄悄告诉第二位游戏者,第二位游戏者又悄悄地告诉第三位,第三位又告诉第四位--以此类推,直到倒数第二位告诉Bob.两位游戏者在传话中,不能让其他人听到,也不能使用肢体动作来解释.最后,Bob把他所听到的话告诉大家,Alice也把她原本所想的话告诉大家.  由于传话过