zoukankan      html  css  js  c++  java
  • UVA 12901 Refraction 折射 (物理)

    一道物理题,解个2次方程就行了。。。

    求h最小的情况对应如下图所示

    做法不唯一,我想避免精度损失所以在化简的时候尽可能地去避免sqrt和浮点数乘除。

    似乎精度要求很低,直接用角度算也可以

    #include<cstdio>
    #include<cmath>
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--){
            int W,H,x,xe,ye;
            double u;
            scanf("%d%d%d%d%d%lf",&W,&H,&x,&xe,&ye,&u);
            int Y = ye - H, X = xe - W;
            int C = X*ye-Y*(xe-x);
            int X2 = X*X, Y2 = Y*Y;
            double lamda = (u*u)*(X2+Y2) - X2;
            double a = (lamda - Y2)*X2;
            double b = -2*X*lamda*C;
            double c = lamda*C*C;
            double delta = b*b - 4*a*c;
            if(delta>=0){
                double h = (sqrt(delta) - b)/(2*a);
                if(h>H) printf("Impossible
    ");
                else {
                    if(h < 0) printf("0
    ");
                    else printf("%.4lf
    ",h);
                }
            }else {
                printf("Impossible
    ");
            }
        }
    
        return 0;
    }
  • 相关阅读:
    SpringBoot04-web
    springboot03-日志功能
    SpringBoot02-自动配置原理
    SpringBoot02
    SpringBoot01
    八大排序算法
    SpringSecurity04
    SpringSecurity03
    SpringSecurity02
    SpringSecurity01
  • 原文地址:https://www.cnblogs.com/jerryRey/p/4652419.html
Copyright © 2011-2022 走看看