ZOJ 3728 Collision
---恢复内容开始---
今天无事水一水,结果就看到这个水题了!
题意思是 有俩个区域如图

求在俩个圆之间的运动时间 给出 初始的开始点和速度的矢量式;而且这个点 不再俩个圆之间的区域,且碰到内测园会反弹:
在大大物实验的时候记得学过为了减少误差 和简易计算可以:把这个小圆看成质点,并把固定园的半径加上小圆的半径。
其实就是求 与俩个圆与射线的交点! 代码如下:()
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
using namespace std;
struct point
{
double x,y;
point (double x=0,double y=0):x(x),y(y){}
};
typedef point Vector;
const double eps=1e-8;
int dcmp(double x)
{
if(fabs(x)<eps) return 0;
return x<0?-1:1;
}
Vector operator + (Vector a,Vector b){return Vector(a.x+b.x,a.y+b.y);}
Vector operator - (Vector a,Vector b){return Vector(a.x-b.x,a.y-b.y);}
Vector operator * (Vector a,double b){return Vector(a.x*b,a.y*b);} double det(Vector a,Vector b){return a.x*b.y-a.y*b.x;}
double dot(Vector a,Vector b){return a.x*b.x+a.y*b.y;}
double lenth(Vector a){return sqrt(dot(a,a));}
struct line
{
point p;
Vector v;
double angle;
line(){}
line(point p,Vector v):p(p),v(v){}
bool operator <(const line &rht)const
{
return angle<rht.angle;
}
};
struct circle
{
point c;
double r;
circle(){c=point(0.0,0.0);}
circle(point c,double r):c(c),r(r){}
point Point(double rad)
{
return point(c.x+cos(rad)*r,c.y+sin(rad)*r);
}
};
int get_circle_intersection(line L,circle C,double &t1,double &t2)
{
t1=t2=0;
double a=L.v.x, b=L.p.x-C.c.x,c=L.v.y,d=L.p.y-C.c.y; double e=a*a+c*c,f=2*(a*b+c*d),g=b*b+d*d-C.r*C.r; double detle = f*f-4*e*g; if(dcmp(detle)<0) return 0;
if(dcmp(detle)==0) {t1=t2=-f/(2*e);return 1;}
t1=(-f-sqrt(detle)) /(2*e);
t2=(-f+sqrt(detle)) /(2*e);
if(dcmp(t1)<0 || dcmp(t2)<0) return 0;//按照速度的反方向才可以和圆相交
return 2;
}
int main()
{
double t1,t2;
double x1,x2;
line tmp;
circle tmp1;
circle tmp2;
double Rm, R, r;
while(~scanf("%lf %lf %lf %lf %lf %lf %lf",&Rm,&R,&r,&tmp.p.x,&tmp.p.y,&tmp.v.x,&tmp.v.y))
{
Rm+=r;R+=r;
tmp1.r=Rm;
tmp2.r=R;
int count1=get_circle_intersection(tmp,tmp1,t1,t2);
int count2=get_circle_intersection(tmp,tmp2,x1,x2);
if(count2==0)printf("0.00\n");
else
printf("%.3lf\n",fabs(x2-x1)-fabs(t1-t2));// 因为直线式点+向量(和速度一样)所以减法就可以了
}
return 0;
}
ZOJ 3728 Collision的更多相关文章
- 2013 ACM/ICPC 长沙现场赛 C题 - Collision (ZOJ 3728)
Collision Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge There's a round medal ...
- 简单几何(直线与圆的交点) ZOJ Collision 3728
题目传送门 题意:有两个一大一小的同心圆,圆心在原点,大圆外有一小圆,其圆心有一个速度(vx, vy),如果碰到了小圆会反弹,问该圆在大圆内运动的时间 分析:将圆外的小圆看成一个点,判断该直线与同心圆 ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- ZOJ People Counting
第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ 3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...
- ZOJ 3686 A Simple Tree Problem
A Simple Tree Problem Time Limit: 3 Seconds Memory Limit: 65536 KB Given a rooted tree, each no ...
- ZOJ Problem Set - 1394 Polar Explorer
这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...
- ZOJ Problem Set - 1392 The Hardest Problem Ever
放了一个长长的暑假,可能是这辈子最后一个这么长的暑假了吧,呵呵...今天来实验室了,先找了zoj上面简单的题目练练手直接贴代码了,不解释,就是一道简单的密文转换问题: #include <std ...
- ZOJ Problem Set - 1049 I Think I Need a Houseboat
这道题目说白了是一道平面几何的数学问题,重在理解题目的意思: 题目说,弗雷德想买地盖房养老,但是土地每年会被密西西比河淹掉一部分,而且经调查是以半圆形的方式淹没的,每年淹没50平方英里,以初始水岸线为 ...
- ZOJ Problem Set - 1006 Do the Untwist
今天在ZOJ上做了道很简单的题目是关于加密解密问题的,此题的关键点就在于求余的逆运算: 比如假设都是正整数 A=(B-C)%D 则 B - C = D*n + A 其中 A < D 移项 B = ...
随机推荐
- Python 分析Twitter用户喜爱的推文
CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-8-5 @author: guaguastd @name: an ...
- 访何红辉:谈谈Android源码中的设计模式
最近Android 6.0版本的源代码开放下载,刚好分析Android源码的技术书籍<Android源码设计模式解析与实战>上市,我们邀请到它的作者何红辉,来谈谈Android源码中的设计 ...
- struts2对action中的方法进行输入校验(2)
struts2输入校验流程: 1.类型转换器对请求參数运行类型转换,并把转换后的值赋给aciton中的属性 2.假设在运行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext, ...
- expdp时遇到ORA-31693&ORA-02354&ORA-01466
expdp时遇到ORA-31693&ORA-02354&ORA-01466 对一个schema运行expdp导出,expdp命令: nohup expdp HQ_X1/HQ_X1 DU ...
- Filezilla出现中文乱码
使用Filezilla client FTP客户端登陆某些FTP站点会出现中文乱码,原因是FTP服务器端编码与filezilla client端编码不一致造成的,解决方法如下:文件-站点管理-选中要登 ...
- Hadoop Hive与Hbase关系 整合
用hbase做数据库,但因为hbase没有类sql查询方式,所以操作和计算数据很不方便,于是整合hive,让hive支撑在hbase数据库层面 的 hql查询.hive也即 做数据仓库 1. 基于Ha ...
- kafka web console安装
貌似非常多小伙伴都不能成功打包,共享下之前打包的文件: http://pan.baidu.com/s/1sjkE37J ======== kafka自己竟然没有还一个Web管理界面.. 这里有个第三方 ...
- 基于CORS的geoserver同源访问策略
这个问题理顺整个2天.终于攻克.记录下来. 1.下载文件 首先下载cors压缩包,解压,得到的是org/mortbay/servlets/CrossOriginFilter.class文件,把此文件拷 ...
- hdu1513(最长公共子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 题意:将一个字符串转变为回文串的最少添加字符个数 分析:只要想到将字符串逆序后与原字符串求最长公 ...
- 全面剖析Redis Cluster原理和应用 (转)
1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最核心的目标有三个: 性能:这是Redis赖以生 ...