HDU 4793 Collision --解方程
来源:互联网 发布:mac apache forbidden 编辑:程序博客网 时间:2024/04/29 12:25
题意: 给一个圆盘,圆心为(0,0),半径为Rm, 然后给一个圆形区域,圆心同此圆盘,半径为R(R>Rm),一枚硬币(圆形),圆心为(x,y),半径为r,一定在圆形区域外面,速度向量为(vx,vy),硬币向圆盘撞过去,碰到圆盘后会以相反方向相同速度回来(好像有点违背物理规律啊,但是题目是这样,没办法)。问硬币某一部分在圆形区域内的总时间。
解法: 解方程,求 (x+vx*t,y+vy*t) 代入圆形区域方程是否有解,如果没解,说明硬币运动轨迹与圆形区域都不相交,答案为0
如果有解,再看代入圆盘有没有解,如果有解,即为两个解的差值*2, 如果没解,那么就是与圆形区域相交的两个点的t的差值。
有一个坑就是t的解可能为负,要判掉。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <algorithm>#define eps 1e-8using namespace std;#define N 10007int sgn(double x){ if(x > eps) return 1; if(x < -eps) return -1; return 0;}int main(){ double Rm,R,r,x,y,vx,vy; while(scanf("%lf%lf%lf%lf%lf%lf%lf",&Rm,&R,&r,&x,&y,&vx,&vy)!=EOF) { double A1 = (vx*vx+vy*vy); double B1 = (2*vx*x+2*y*vy); double C1 = x*x+y*y-(R+r)*(R+r); double A2 = A1; double B2 = B1; double C2 = x*x+y*y-(Rm+r)*(Rm+r); double delta1 = B1*B1 - 4.0*A1*C1; double delta2 = B2*B2 - 4.0*A2*C2; if(sgn(delta1) <= 0) { puts("0.000"); continue; } double J11 = (-B1 + sqrt(delta1))/(2.0*A1); double J12 = (-B1 - sqrt(delta1))/(2.0*A1); if(sgn(J12) >= 0) { if(sgn(delta2) <= 0) { printf("%.3f\n",fabs(J11-J12)); continue; } double J22 = (-B2 - sqrt(delta2))/(2.0*A2); printf("%.3f\n",(J22-J12)*2.0); } else puts("0.000"); } return 0;}
0 0
- HDU 4793 Collision --解方程
- HDU-4793 Collision 计算几何 解方程
- [ZOJ3728] Collision && 暴力解方程
- HDU - 4793 Collision
- HDU 4793 Collision
- hdu-4793-Collision
- HDU 4793 Collision
- HDU 5514 Collision(扩展欧几里得+解方程)——2014ACM/ICPC亚洲区北京站
- UVALive 6613 Collision(物理解方程)
- HDU 5114 Collision 拓展GCD方法和解方程都能解
- HDU 5114 Collision(一元线性同余方程)
- HDU 5114 Collision(一元线性同余方程)
- HDU 4793 Collision 【计算几何】
- hdu 4793 Collision(几何)
- HDU 4793 Collision【计算几何】
- HDU 4793 Collision【计算机几何】【经典】
- HDU 1071 解方程
- HDU 4793 Collision + HDU 4798 Skycity 简单几何
- POJ 3416 Crossing --离线+树状数组
- HDU 4286 Data Handler --双端队列
- HDU 4282 A very hard mathematic problem --枚举+二分(或不加)
- 一些整数类型的表示范围
- android.os.BadParcelableException: ClassNotFoundException when unmarshalling
- HDU 4793 Collision --解方程
- HDU 4454 Stealing a Cake --枚举
- HDU 4455 Substrings --递推+树状数组优化
- HDU 4460 Friend Chains --BFS
- HDU 5101 Select --离散化+树状数组
- HDU 4409 Family Name List --乱搞、LCA
- HDU 4445 Crazy Tank --枚举
- HDU 5102 The K-th Distance
- HDU 4419 Colourful Rectangle --离散化+线段树扫描线