物理课(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),就凑合着当水题做吧。
来源
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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构