HDU 4793 Collision --解方程

來源:互聯網
上載者:User

標籤:style   blog   http   io   color   ar   os   sp   div   

題意: 給一個圓盤,圓心為(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;}
View Code

 

HDU 4793 Collision --解方程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.