偷瞥一眼


私信TA

用户名:uq_39778205211

访问量:8

签 名:

等  级
排  名 10897
经  验 1073
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

首先,按照L,W,x,y,R,a,v,s的形式来讲

    第一点,明确台球中心点概念,每次碰撞并不是中心点碰撞台球桌边界,而是以边界撞击边界值,所以台球中心点的位移区域是R<=x<=L-R,R<=y<=W-R,

由此我们计算中心点,可以把初始(x 、y)都-R,初始(L、W) -2R

    第二点,由于不消耗动能,每次都是完全弹性碰撞,你可以做出四个角度的sinx、cosx,并在此基础上发现每次碰撞,只不过是将Vx(x方向速度),Vy(y方向速度)取反,

    第三点,仔细思考,你会发现无论哪个角度而言,无论a为0或者359度,Vx始终是x坐标轴的v*cosa,Vy始终是y坐标轴的v*sina

    第四点,既然知道了恒等,那么是否可以用 s(秒)*v(速度)求总距离,那么延伸来讲,是不是用 (x-R+Xdistance)%(L-2R)+ R 来表示台球X轴方向相对位置,(y-R +Ydistance)  | (W-2R)来表示台球Y轴方向相对位置,

    第五点, 考虑碰撞次数问题,

        假设Vx为正数,那么s*Vx为正数,假设x方向碰撞了一次,那么X方向的distance%(L-2R)是不是要取反才是x,y的坐标,第二次碰撞是不是就不用取反,...

        那假设Vx是负数,碰撞一次依旧要上一轮基础上取反,第二次不用

    所以计算碰撞次数n,在用幂次方判断(-1)** n,就可以得到结果

注意事项:

参考代码:

import math

while True:
   Lis = [int(i) for i in input().split()]
   if (Lis[0]==0 and Lis[1]==0 and Lis[2]==0 and Lis[3]==0
           and Lis[4]==0 and Lis[5]==0 and Lis[6]==0 and Lis[7]==0):
       break
   x, y = math.cos(math.radians(Lis[5])), math.sin(math.radians(Lis[5]))
   n1 = (-1)**((Lis[2] + x * Lis[7] * Lis[6] - Lis[4]) // (Lis[0] - 2 * Lis[4]))
   n2 = (-1)**((Lis[3] + y * Lis[7] * Lis[6] - Lis[4]) // (Lis[1] - 2 * Lis[4]))
   res1 = n1*(Lis[2]+x*Lis[7]*Lis[6]-Lis[4])%(Lis[0]-2*Lis[4])+Lis[4]
   res2 = n2*(Lis[3]+y*Lis[7]*Lis[6]-Lis[4])%(Lis[1]-2*Lis[4])+Lis[4]
   print('{:.2f} {:.2f}'.format(res1, res2))

 

0.0分

2 人评分

新上线《蓝桥杯辅导》课程,近五年的蓝桥杯省赛与国赛真题都有,从读题开始理解题意、梳理思路、实现代码再提交评测全过程,可有效提升获奖比例甚至进国赛!课程介绍、试听请猛击这里

  评论区

  • «
  • »