D - Ball in a Rectangle
2013-08-25 08:43
162 查看
题目:here
题目大意:一个半径为R的圆以一个角度α和恒定速度v在一个L*W的场地中乱撞,撞墙后反射的方向与镜面反射相同。
思路:首先,一个圆在[0,L]、[0,W]里乱撞,相当于一个这个圆的圆心在[R, L-R], [R, W-R]里乱撞。答案也是要圆心,那么只考虑圆心即可。之后,速度是恒定的,横向速度和纵向速度也是不变的,假设场地为无限大,那么我们一开始就可以算出 最终坐标(理论上来说极限数据会爆double的精度,但是AC了,我就不管了……要是真WA了我们可以试试long double……)。然后x、y完全可以分开算,他们之间一点影响都木有。于是考虑x,若有一堵墙在L-R处,如果没有墙L我们可以到达xi(超过了L- R),那么有墙我们就会到达2*(L-R) - xi;如果有墙在R,我们可以到达xi(小于R),那么我们就会到达2 * R - xi。不断重复直到xi落在[R, L-R]之间(极限数据这样搞可能会TLE,但是AC了,所以也不管了……)。Y一样搞法,不重复说了。
PS:不要找我要证明我不会,我只能说我觉得这样搞是对的。
题目大意:一个半径为R的圆以一个角度α和恒定速度v在一个L*W的场地中乱撞,撞墙后反射的方向与镜面反射相同。
思路:首先,一个圆在[0,L]、[0,W]里乱撞,相当于一个这个圆的圆心在[R, L-R], [R, W-R]里乱撞。答案也是要圆心,那么只考虑圆心即可。之后,速度是恒定的,横向速度和纵向速度也是不变的,假设场地为无限大,那么我们一开始就可以算出 最终坐标(理论上来说极限数据会爆double的精度,但是AC了,我就不管了……要是真WA了我们可以试试long double……)。然后x、y完全可以分开算,他们之间一点影响都木有。于是考虑x,若有一堵墙在L-R处,如果没有墙L我们可以到达xi(超过了L- R),那么有墙我们就会到达2*(L-R) - xi;如果有墙在R,我们可以到达xi(小于R),那么我们就会到达2 * R - xi。不断重复直到xi落在[R, L-R]之间(极限数据这样搞可能会TLE,但是AC了,所以也不管了……)。Y一样搞法,不重复说了。
PS:不要找我要证明我不会,我只能说我觉得这样搞是对的。
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <cmath> using namespace std; typedef long long LL; const double PI = acos(-1.0); const double EPS = 1e-4; LL L, W, x, y, R, a, v, s; int main() { //cout<<cos(PI/2)<<endl; while(cin>>L>>W>>x>>y>>R>>a>>v>>s) { if(L == 0 && W == 0 && x == 0 && y == 0 && R == 0 && a == 0 && v == 0 && s == 0) break; double nx = x + v * cos(PI * a / 180) * s, ny = y + v * sin(PI * a / 180) * s; L -= R; W -= R; while(R >= nx + EPS || nx - EPS >= L) { if(R >= nx) nx = 2 * R - nx; //if(nx >= 20 * L) nx = nx - 20 * L; if(nx >= L) nx = 2 * L - nx; } while(R >= ny + EPS || ny - EPS >= W) { if(R >= ny) ny = 2 * R - ny; if(ny >= W) ny = 2 * W - ny; } printf("%.2f %.2f\n", nx, ny); } }
相关文章推荐
- UVA 11880 Ball in a Rectangle(数学+平面几何)
- UVA 11880 Ball in a Rectangle 几何
- toj 4608 Ball in a Rectangle
- UVA 11880 (Ball in a Rectangle) 平面几何
- UVA11880 Ball in a Rectangle
- UVA 11880 Ball in a Rectanglefds
- uva 11880 Ball in a Rectangle(计算几何)
- POJ2559--Largest Rectangle in a Histogram(栈)
- POJ 2559 Largest Rectangle in a Histogram【单调栈】
- hdoj 1506 | poj 2559 Largest Rectangle in a Histogram
- Largest Rectangle in Histogram
- hdu 1506(nyoj 258)Largest Rectangle in a Histogram(最大长方形(二))(单调栈)
- LeetCode | Largest Rectangle in Histogram
- hdu 1506 Largest Rectangle in a Histogram(单调栈)
- POJ 2559 Largest Rectangle in a Histogram RMQ || 单调栈
- Largest Rectangle in Histogram
- poj 2559 Largest Rectangle in a Histogram
- LeetCode84 --Largest Rectangle in Histogram
- [Leetcode][python]Largest Rectangle in Histogram
- hdu 1506 Largest Rectangle in a Histogram