题意是给定两个点的位置,过原点引一条射线穿过第一个点,射线位置作为斜面位置,第二个点处令一小球自由落体,问小球能碰撞到斜面几次。

开始时想算出两次碰撞中小球沿斜面运动的距离,然后发现每一段距离会因为高度差导致动能不断变大,然后一脸懵......

直到看了别人的题解,才想起运动分解来(这可是高中基础知识,罪过)。

将小球受到的重力在平行于斜面和垂直于斜面方向分解,小球在平行于斜面方向做初速度为0的匀加速直线运动,在垂直于斜面方向做类自由落体(初速度为0的匀加速直线)运动,由于能量不会因碰撞而损耗,那么只要求出小球沿斜面方向运动时在斜面上方的总时间,再求出小球在垂直于斜面方向上做匀加速直线运动加匀减速直线运动(一个周期)的单次碰撞时间(因为两次运动的对称性,此处算半周期就可以),用总时间除以单次碰撞的时间就是答案。(注意第一次碰撞所花时间只有半周期的时间)

 #include <cstdio>
#include <cmath>
using namespace std;
int main()
{
int times,n,m,ans;
double a1,a2,h,x,y,a,b,t,pt,theta,g = 9.8;
scanf("%d",&times);
while (times--)
{
scanf("%lf%lf%lf%lf",&a,&b,&x,&y);
theta = atan(b/a); //斜面与水平面的夹角
a1 = g * sin(theta); //平行于斜面方向的加速度
a2 = g * cos(theta); //垂直于斜面方向的加速度
h = (y + b/a*x) * cos(theta); //小球到斜面的距离
x = (y + b/a*x) * sin(theta) + (x *(-) / cos(theta)); //小球沿斜面方向到斜面底部的距离
t = sqrt(x * / a1); //小球在斜面上运动的时间
pt = sqrt(h * / a2); //小球从初位置到斜面的单次时间
if(t > pt) //计算小球能否至少碰撞在斜面上一次
{
t -= pt;
ans = ;
}
ans += t / pt / ; //计算小球剩余的时间能完成多少来回(即碰撞次数)
printf("%d\n",ans);
}
return ;
}

最新文章

  1. HTTP POST请求报文格式分析与Java实现文件上传
  2. linux文件基本属性
  3. UVA 1395 (kruskal)
  4. POJ1154
  5. ural 1150. Page Numbers
  6. Linux搭建NFS提供磁盘给Windows使用
  7. [GeekBand]C++高级编程技术(2)
  8. The _imageingft C module is not installed
  9. [swustoj 585] 倒金字塔
  10. mysql 参数:[read_buffer_size] [sort_buffer_size] [read_rnd_buffer_size] [tmp_table_size]---图解
  11. 如何評鑑一家SMT代工廠
  12. python3的urllib2报错问题解决方法
  13. TypeScript笔记 5--变量声明(解构和展开)
  14. cf B. Mishka and trip (数学)
  15. 团队作业6——展示博客(Alpha版本)
  16. Mac 上有哪些鲜为人知且极大提高效率的工具?
  17. 转:三值逻辑与NULL的处理方式
  18. 解决 在 WINDOWS 下 同时安装 python2 python3 后 pip 错误
  19. mysql 5.7.10使用dbforget Studio 连接异常
  20. 禁用IE缓存

热门文章

  1. restfull api交互常用状态码
  2. QML 用QSortFilterProxyModel实现搜索功能
  3. Min_25 筛小结
  4. awk文本分析工具
  5. 【Vijos】lxhgww的奇思妙想(长链剖分)
  6. 【BZOJ5303】[HAOI2018]反色游戏(Tarjan,线性基)
  7. 【CTSC2018】暴力写挂(边分治,虚树)
  8. [模板]KMP算法
  9. 原生JS节点操作
  10. 牛客练习赛40 A 小D的剧场 (思维dp)