物理課(physics)
阿新 • • 發佈:2018-11-16
物理課(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),就湊合著當水題做吧。
來源
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\n",tmp); } return 0; }