HDU-1700 Points on Cycle
这题的俩种方法都是看别人的代码,方法可以学习学习,要多看看。。
几何题用到向量。。
Points on Cycle
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1294 Accepted Submission(s): 455
Alway output the lower one first(with a smaller Y-coordinate value), if they have the same Y value output the one with a smaller X.
when output, if the absolute difference between the coordinate values X1 and X2 is smaller than 0.0005, we assume they are equal.
1.500 2.000
563.585 1.251
-280.709 -488.704 -282.876 487.453
//题意:一个以原点为中心的圆,告诉你圆上的一个点,求与另外的两个点组成的三角形的周长最长的两点作标。
//根据几何知识,知道圆内等边三角形的周长最长。所以题目转化为求已知一个点的圆内接等边三角形的另两点作标。
//思路:设P(x,y),一个方程是pow(x,2)+pow(y,2)=pow(r,2);另一个方程是根据向量知识,向量的夹角公式得到方程。
//因为圆心角夹角为120度,已知一个向量(即一个点作标),所以COS(2PI/3)=a*b/|a|*|b|;(a,b为向量);
//已知角和a向量,就可求b向量b(x,y).由方程组可求得(x,y);最后得到的是一元二次方程组,可得到两个解,即为两个点的作标。
//代码如下:
#include <stdio.h>
#include <math.h>
#define PI 3.1415926
int main()
{
double x,y,x1,y1,x2,y2,cosx,a,b,c,r,delta;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf",&x,&y);
r=sqrt(x*x+y*y);
a=r*r;
b=r*r*y;
c=r*r*r*r/4-x*x*r*r;
delta=b*b-4*a*c;
y1=(-1*b-sqrt(delta))/(2*a);
y2=(-1*b+sqrt(delta))/(2*a);
if(x==0)
{
x1=-sqrt(r*r-y1*y1);
x2=sqrt(r*r-y2*y2);
}
else
{
x1=(-1*r*r/2-y*y1)/x;
x2=(-1*r*r/2-y*y2)/x;
}
printf("%.3lf %.3lf %.3lf %.3lf\n",x1,y1,x2,y2);
}
return 0;
}
/*已知一个以(0,0)为圆心的圆和圆上的一点(x0,y0)求圆上的另外两点(x1,y1,)(x2,y2),使得向量(x1,y1)(x2,y2)和(x0,y0)各个向量两两之间夹角为120度
此题主要用到向量的叉乘和点乘列出两个二元一次方程组
1.
(x0,y0)X (x1,y1) = sin(120)*R^2 (r为圆的半径)
(x0,y0) * (x1,y1) = cos(120)*R^2
结果为:
x1=b*x0-a*y0; a=sin120
y1=b*y0+a*x0; b=cos120;
2.
(x0,y0)X (x2,y2) = -sin(120)*R^2 (r为圆的半径)
(x0,y0) * (x2,y2) = cos(120)*R^2
注:题目假设向量(x1,y1)在向量(x0,y0)逆时针方向 故叉乘结果为正值
(x2,y2)于(x0,y0)的顺时针方向 故叉乘结果为负值*/
#include <stdio.h>
#include <math.h>
int main()
{
double a,b,sinx,cosx,x0,y0,x1,y1,x2,y2;
int t;
a=sinx=sqrt(3.0)/2;
b=cosx=-0.5;
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf",&x0,&y0);
x1=b*x0-a*y0;
y1=b*y0+a*x0;
x2=b*x0+a*y0;
y2=b*y0-a*x0;
if(y1<y2||((abs(y1-y2)<0.005)&&x1<x2))
{
printf("%.3lf %.3lf %.3lf %.3lf\n",x1,y1,x2,y2);
}
else
printf("%.3lf %.3lf %.3lf %.3lf\n",x2,y2,x1,y1);
}
return 0;
}
HDU-1700 Points on Cycle的更多相关文章
- hdu 1700 Points on Cycle(坐标旋转)
http://acm.hdu.edu.cn/showproblem.php?pid=1700 Points on Cycle Time Limit: 1000/1000 MS (Java/Others ...
- HDU 1700 Points on Cycle (坐标旋转)
题目链接:HDU 1700 Problem Description There is a cycle with its center on the origin. Now give you a poi ...
- HDU 1700 Points on Cycle (几何 向量旋转)
http://acm.hdu.edu.cn/showproblem.php?pid=1700 题目大意: 二维平面,一个圆的圆心在原点上.给定圆上的一点A,求另外两点B,C,B.C在圆上,并且三角形A ...
- HDU 1700 Points on Cycle(向量旋转)
题目链接 水题,卡了下下精度. #include <cstdio> #include <iostream> #include <cmath> using names ...
- hdu 1700 Points on Cycle 水几何
已知圆心(0,0)圆周上的一点,求圆周上另外两点使得三点构成等边三角形. 懒得推公式,直接用模板2圆(r1=dist,r2=sqrt(3)*dist)相交水过 #include<cstdio&g ...
- Points on Cycle (hdu1700,几何)
Points on Cycle Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu1700 Points on Cycle
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=1700 题目: Points on Cycle Time Limit: 1000/1000 MS ...
- 暑假集训(2)第九弹 ----- Points on Cycle(hdu1700)
Points on Cycle Time Limit:1000MS Memory Limit:32768 ...
- L - Points on Cycle(旋转公式)
L - Points on Cycle Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
随机推荐
- 队列(顺序存储)C++模板实现
队列:一端进行插入,另一端进行删除的线性结构,具有先进先出性.利用数组来实现队列将面临"假溢出"的情况,如下图所示: front:永远指向队首元素,队首在本文中是允许删除元素的一端 ...
- 网站开发常用jQuery插件总结(一)提示插件alertify
1.alertify插件功能 主要实现提示功能,用于代替js中的alert,confirm,prompt,显示友好的提示框 2.alertify官方地址 http://fabien-d.github. ...
- 青瓷qici - H5小游戏 抽奖机 1 素材
素材链接… 我们准备好所有素材 青瓷的素材引入,可以通过拖动的方式.我们打开windows的资源管理器,所有素材拖动到texture里面 框架会帮你进行预处理方便加载 我们在atlas文件夹里面新建目 ...
- PHP — 用PHP实现一个双向队列
1.简介 deque,全名double-ended queue,是一种具有队列和栈的性质的数据结构.双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行.双向队列(双端队列)就像是一个队 ...
- Git常用命令汇总
1.初始化相关 git init 初始化仓库 git remove add origin url 添加仓库地址 git remove rm origin 删除仓库地址 git clone 克隆别人的分 ...
- 开发设计模式(五)单例模式(Singleton Pattern)
http://blog.sina.com.cn/s/blog_89d90b7c0101805m.html 单例模式:意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提 ...
- C# - implicit, explicit
如果类型直接没有继承关系,也没有共享接口,想在这两个类型之间进行转换,就必须重载转换运算符. 此时需要关键字implicit和explicit. 下面定义了类型ConvClass1和ConvClass ...
- 当页面编辑或运行提交时,出现“从客户端中检测到有潜在危险的request.form值”问题,该怎么办呢?
最近在学习highcharts时,关于其中的导出功能,本来是想把导出的图片存放在本地,发现只有在电脑联网的情况下才可以一下导出图片,后来查阅了一番资料,才发现highcharts中的导出默认的官网服务 ...
- C#正则表达式之字符替换
string strTest= "www.BaiDu.com",strRst=""; //忽略大小写,将strTest中的BaiDu替换为baidu Regex ...
- C++引用的实质
转自探索c++的底层机制 在看这篇文章之前,请你先要明白一点:那就是c++为我们所提供的各种存取控制仅仅是在编译阶段给我们的限制,也就是说是编译器确保了你在完成任务之前的正确行为,如果你的行为不正确, ...