zoukankan      html  css  js  c++  java
  • CodeForces 908C. New Year and Curling 解题报告 Java

    1. 思路

    这题实际上是个几何问题——两个外相切的圆,由勾股定理,他们的纵坐标有以下的规律:

    则有$$y_{n+1} = y_{n} + sqrt{(2r)^2 - (x_{n} - x_{n+1})^2}$$

    其中x代表横坐标,y代表纵坐标,r代表半径。 简略画了个图:

    2. 容易错的地方

    非常直观的想法是,“设有两个圆A、B都在与C相切的直径范围内,那么如果y[A] > y[B], 则 y[A]+ ΔyA > y[B] + ΔyB,所以y[A]+ ΔyA就是C的纵坐标”.但是这是错的,我画了个图:

    3.代码

       public static void main(String[] args) {
           Scanner in = new Scanner(System.in);
           int n = in.nextInt();
           double r = in.nextDouble();
           int[] x = new int[n];
           double[] y = new double[n];
           for(int i = 0; i < n; ++i) 
               x[i] = in.nextInt();
           for(int i = 0; i < n; ++i) {
               y[i] = r;
               for(int j = 0; j < i; ++j) {
                   if(Math.abs(x[i] - x[j]) <= 2*r)
                    {
                        double delta = Math.sqrt(4*r*r - (x[i]-x[j])*(x[i]-x[j]));
                        if(delta + y[j] > y[i])
                            y[i] = delta + y[j];
                    }
               }
               System.out.print(i==0 ? y[i] : " " + y[i]);
           }       
       }
  • 相关阅读:
    EL表达式具体解释
    Android 实战美女拼图游戏 你能坚持到第几关
    redis sentinel安装及配置(单机版)
    ElasticSearch scroll查询 api
    springboot自动配置原理
    kafka实践
    Springboot mybatis
    计算机原理
    快速排序算法
    maven常见报错问题
  • 原文地址:https://www.cnblogs.com/rgvb178/p/8350030.html
Copyright © 2011-2022 走看看