• 物理课(physics)


    物理课(physics)

    题目描述

     

    wzy正在上物理课!他发现了一个完全不会的题目:caoxia在一个奇妙的星球上(重力加速度为gg)踢了一只猫,猫飞起的路线与地面夹角为θθ (角度制),初速度为vv,猫非常地开心,所以每次落地后会自己反弹,但反弹后速度会乘以一个常数d(0≤d<1)d(0≤d<1)。请问猫最后的落点离起点多远?(猫飞行时方向不会改变,飞行过程中不计空气阻力与摩擦力,所有数值单位均为国际标准单位制)

     

    输入

     

    第一行一个数TT,代表有TT组数据。接下来TT每行44个浮点数,分别为θ,v,d,gθ,v,d,g,保留到小数点后两位.

     

    数据范围及约定

    subtask1:50pts,d=0d=0

    subtask2:50pts,0≤v≤1000,0<g≤1000,0≤d<1,0<θ<90,T≤50,0000≤v≤1000,0<g≤1000,0≤d<1,0<θ<90,T≤50,000.

     

    良心出题人没有构造坑人数据,不会卡精度的,只要你相信我

    P.S.这道题可能违背一些物理常识,但是有(chu)一(ti)些(ren)原(tai)因(cai),就凑合着当水题做吧。

     

    来源

    noip2018模拟-南外


    solution

    论学好文化课的重要性

    首先把速度分解为向上大小为cos90-θ*v 的速度和向前为cosθ*v的速度

    设为x,y

    则一次的距离为t*v=2xy/g

    记为S

    题目求S+d^2S+d^4S

    等比数列求和一下

    ans=S/(1-d^2)

    注意cos里面是弧度

    #include<cstdio>
    #include<iostream>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define db double
    using namespace std;
    int T;
    db th,v,d,g;
    int main()
    {
        freopen("physics.in","r",stdin);
        freopen("physics.out","w",stdout);
        cin>>T;
        while(T--){
            scanf("%lf%lf%lf%lf",&th,&v,&d,&g);
            db x=cos(th/180*M_PI)*v,y=cos((90-th)/180*M_PI)*v;
            db tmp=x*y*2/g;
            tmp=tmp/(1-d*d);
            printf("%.5lf
    ",tmp);
        }
        return 0;
    }
  • 相关阅读:
    添加组合索引时,做相等运算字段应该放在最前面
    常用位运算
    redis php扩展简单使用
    mysql优化之简单概念
    mysql优化之sql语句优化
    简单画图 gd库函数
    win下 安装mongodb
    伪静态之实际应用
    tomcat win简单配置
    docker
  • 原文地址:https://www.cnblogs.com/liankewei/p/10358782.html
Copyright © 2020-2023  润新知