zoukankan      html  css  js  c++  java
  • HDU 4793 Collision --解方程

    题意: 给一个圆盘,圆心为(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-8
    using namespace std;
    #define N 10007
    
    int 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
    ",fabs(J11-J12));
                    continue;
                }
                double J22 = (-B2 - sqrt(delta2))/(2.0*A2);
                printf("%.3f
    ",(J22-J12)*2.0);
            }
            else
                puts("0.000");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    CodeForces 219D Choosing Capital for Treeland (树形DP)
    POJ 3162 Walking Race (树的直径,单调队列)
    POJ 2152 Fire (树形DP,经典)
    POJ 1741 Tree (树的分治,树的重心)
    POJ 1655 Balancing Act (树的重心,常规)
    HDU 2196 Computer (树形DP)
    HDU 1520 Anniversary party (树形DP,入门)
    寒门子弟
    JQuery选择器(转)
    (四)Web应用开发---系统架构图
  • 原文地址:https://www.cnblogs.com/whatbeg/p/4080167.html
Copyright © 2011-2022 走看看