链接

可以根据反余弦和反正切算出角a和b的值, 然后向量旋转就可以了,图中的状态旋转rotate((2,0),a+b)  反状态把角度反过来,点取(-2,0)即可。

不知道是不是理解错了,题意写着两圆距离》2,《3.4,在求得时候就加了特判,一直WA。。。去了特判就过了。

为了提高精度,可以全化为atan2.

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
#include<cmath>
#include<queue>
#include<set>
using namespace std;
#define N 100000
#define LL long long
#define INF 0xfffffff
const double eps = 1e-;
const double pi = acos(-1.0);
const double inf = ~0u>>;
const double r = 1.0;
const double rd = 3.40;
struct point
{
double x,y,r;
point(double x=,double y=):x(x),y(y){}
}p[N],q[N];
typedef point pointt;
pointt operator -(point a,point b)
{
return point(a.x-b.x,a.y-b.y);
}
double dis(point a)
{
return sqrt(a.x*a.x+a.y*a.y);
}
double dot(point a,point b)
{
return a.x*b.x+a.y*b.y;
}
double angle(point a,point b)
{
return acos(dot(a,b)/dis(a)/dis(b));
}
double angle1(point v)
{
return atan2(v.y,v.x);
}
int dcmp(double x)
{
if(fabs(x)<eps) return ;
return x<?-:;
}
point rotate(point a,double rad)//逆时针旋转
{
return point(a.x*cos(rad)-a.y*sin(rad),a.x*sin(rad)+a.y*cos(rad));
}
bool cmp(point a,point b)
{
return a.x<b.x;
}
int main()
{
int n,i,j;
while(scanf("%d",&n)&&n)
{
for(i = ; i <= n;i++)
{
double x;
scanf("%lf",&x);
p[i] = point(x,);
}
sort(p+,p+n+,cmp);
int tn = n;
double maxz = ;
point tp;
while()
{
int g = ;
for(i = ; i < tn; i++)
{
if(maxz<p[i].y)
{
maxz = p[i].y;
tp = p[i];
}
// if(dcmp(dis(p[i]-p[i+1])-2*r)<0) continue;
// if(dcmp(dis(p[i]-p[i+1])-rd)>0) continue; double b = atan2(fabs(p[i].y-p[i+].y),fabs(p[i].x-p[i+].x));
double d = dis(p[i]-p[i+])/;
double dd = sqrt(-(d*d));
double a = atan2(dd,d);
if(dcmp(a+b-pi/2.0)>) continue;
if(p[i].y<p[i+].y)
{
point pp = point(2.0,);
q[++g] = rotate(pp,a+b);
q[g] = point(q[g].x+p[i].x,q[g].y+p[i].y);
}
else
{
point pp = point(-,);
q[++g] = rotate(pp,-a-b);
q[g] = point(q[g].x+p[i+].x,q[g].y+p[i+].y);
}
}
if(maxz<p[tn].y)
{
maxz = p[tn].y;
tp = p[tn];
}
if(!g) break;
tn = g;
for(i = ; i <= g ; i++)
p[i] = q[i];
}
printf("%.4f %.4f\n",tp.x,tp.y);
}
return ;
}

poj2194Stacking Cylinders的更多相关文章

  1. acdream:Andrew Stankevich Contest 3:Two Cylinders:数值积分

    Two Cylinders Special JudgeTime Limit: 10000/5000MS (Java/Others)Memory Limit: 128000/64000KB (Java/ ...

  2. zoj 2369 Two Cylinders

    zoj 2369 Two Cylinders 链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2369 题意:已知两个无 ...

  3. sicily 1012. Stacking Cylinders & 1206. Stacking Cylinders

    Time Limit: 1sec    Memory Limit:32MB  Description Cylinders (e.g. oil drums) (of radius 1 foot) are ...

  4. SGU 217. Two Cylinders

    题意:给空间内两根圆柱,求轴线垂直相交时公共部分的体积. 暴力积分即可. ID: Date'n'Time: Name: Task: .Ext: Status: Time: Memory: 158937 ...

  5. UVAlive 7414 Squeeze the Cylinders a,b,c三种步数 搜索+最短路

    题意:给你n个点(n<=50),然后有些点之间会有一条路,路是单向的,每个回合让你走a,b,c三种步数中的任意一种(a,b,c<=100),问你最少需要多少个回合才能保证一定能从1点到达n ...

  6. Linux基础介绍【第九篇】

    服务器添加3块磁盘的体系结构 [root@oldboylinux test]# free -m              total used free shared buffers cached M ...

  7. Linux基础介绍【第四篇】

    Linux文件和目录的属性及权限 命令: [root@oldboy ~]# ls -lhi total 40K 24973 -rw-------. 1 root root 1.1K Dec 10 16 ...

  8. liunx 磁盘管理命令记录

    Linux磁盘管理好坏管理直接关系到整个系统的性能问题. Linux磁盘管理常用三个命令为df.du和fdisk. df:列出文件系统的整体磁盘使用量 du:检查磁盘空间使用量 fdisk:用于磁盘分 ...

  9. Linux系统中的Device Mapper学习

    在linux系统中你使用一些命令时(例如nmon.iostat 如下截图所示),有可能会看到一些名字为dm-xx的设备,那么这些设备到底是什么设备呢,跟磁盘有什么关系呢?以前不了解的时候,我也很纳闷. ...

随机推荐

  1. JavaEE基础(十)

    1.面向对象(package关键字的概述及作用) A:为什么要有包 将字节码(.class)进行分类存放 包其实就是文件夹 B:包的概述 举例: 学生:增加,删除,修改,查询 老师:增加,删除,修改, ...

  2. sql 语法

    CASE ISNULL(b.enddate , '2000-1-1') WHEN '2000-1-1' THEN '未发稿' ELSE '已经发稿' END 如果时间为空,则显示为值‘200-1-1’ ...

  3. Visual Studio + SqlServer

    vs2010: http://pan.baidu.com/s/1eQrlUwU sqlServer2008: http://pan.baidu.com/s/1sjQbyk1

  4. servlet中Java连接数据库后的基本操作

    servlet中Java连接数据库后的基本操作 在eclipse中新建一个工程:login 在Server中新建一个服务器,基本的操作不用说了,在前两天的笔记中可以找到; 需要知道数据库的用户名和密码 ...

  5. python代码

    f=open('/home/xbwang/newtextsimilarity/data/glove/glove.840B.300d.txt','r') count = 0 print ' '.join ...

  6. UML建模的要点总结

    预备知识: 一.UML的特性与发展现状 UML是一种Language(语言) UML是一种Modeling(建模)Language UML是Unified(统一)Modeling Language 1 ...

  7. Objective-C之category

    http://blog.csdn.net/siemenliu/article/details/7835808

  8. 嵌入式学习_AD学习篇

    AD基础使用: 1.建立一个工作区 (.DsnWrk) workspace 2.建立一个PCB工程(.PrjPCB)  project 3.建立一个PCB原理图文件(理论上告诉你两个点连接起来) 建立 ...

  9. 【Eclipse】安装subclipse的Eclipse插件

    下载地址 subclipse subclipse Download and Install 一般来说,有两种方式:在线安装.离线包安装. 离线包安装 这里记录的是离线包的安装方式: 下载好离线包 He ...

  10. 复旦大学2013--2014学年第一学期(13级)高等代数I期末考试第七大题解答

    七.(本题10分)设 \(A\) 为数域 \(K\) 上的 \(n\) 阶非异阵, 证明: 对任意的对角阵 \(B\in M_n(K)\),  \(A^{-1}BA\) 均为对角阵的充分必要条件是 \ ...