zcmu1756(模拟)
生活随笔
收集整理的這篇文章主要介紹了
zcmu1756(模拟)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1756: 臺球碰撞
Time Limit:?1 Sec??Memory Limit:?128 MB
Submit:?106??Solved:?42
[Submit][Status][Web Board]
Description
在平面直角坐標系下,臺球桌是一個左下角在(0,0),右上角在(L,W)的矩形。有一個球心在(x,y),半徑為R的圓形母球放在臺球桌上(整個球都在臺球桌內)。受撞擊后,球沿極角為a的射線(即:x正半軸逆時針旋轉到此射線的角度為a)飛出,每次碰到球桌時均發生完全彈性碰撞(球的速率不變,反射角等于入射角)。 如果球的速率為v,s個時間單位之后球心在什么地方?
Input
輸入文件最多包含25組測試數據,每個數據僅一行,包含8個正整數L,W,x,y,R,a,v,s(100<=L,W<=105, 1<=R<=5, R<=x<=L-R, R<=y<=W-R, 0<=a<360, 1<=v,s<=105),含義見題目描述。L=W=x=y=R=a=v=s=0表示輸入結束,你的程序不應當處理這一行。
Output
對于每組數據,輸出僅一行,包含兩個實數x, y,表明球心坐標為(x,y)。x和y應四舍五入保留兩位小數
Sample Input
100 100 80 10 5 90 2 23
110 100 70 10 5 180 1 9999
0 0 0 0 0 0 0 0
Sample Output
80.00 56.00
71.00 10.00
HINT
?
?
#include<bits/stdc++.h> using namespace std;#define e exp(1) #define pi acos(-1) #define mod 1000000007 #define inf 0x3f3f3f3f #define ll long long #define ull unsigned long long #define mem(a,b) memset(a,b,sizeof(a)) int gcd(int a,int b){return b?gcd(b,a%b):a;}int main() {double l,w,x,y,r,a,v,s;double px,py;while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&l,&w,&x,&y,&r,&a,&v,&s),r!=0){l-=r,w-=r;//因為球有半徑,所以整個球只能放在l-r和w-r之間px=x+v*cos(a/180*pi)*s;//提前算出它在x軸下的最終分量坐標,px是可正可負的py=y+v*sin(a/180*pi)*s;//提前算出它在y軸下的最終分量坐標,py也是可正可負的while(r>px||px>l)//如果不在l-r和w-r之間,也就意味著撞上了邊界了,分兩種情況考慮{if(r>px)//第一種情況:撞上了左邊界px=r+(r-px);//(1)其中(r-px)是超過的部分(實際上是不可能的,它只會反彈回去),超過多少再用r加回去就是反彈到的實際的位置else//第二中情況:撞上了右邊界px=l-(px-l);//同(1)}while(r>py||py>w)//同上{if(r>py)//撞上了下邊界py=r+(r-py);//(1)else//撞上了上邊界py=w-(py-w);//(1)}printf("%.2lf %.2lf\n",px,py);}return 0; }?
總結
以上是生活随笔為你收集整理的zcmu1756(模拟)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ACM/ICPC 2018亚洲区预选赛北
- 下一篇: 十年架构师详解JVM运行原理