hdu 1785(You Are All Excellent)(数学函数atan2(y.x)返回(x,y)的反正切值)

You Are All Excellent

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 2945    Accepted Submission(s): 1061

Problem Description

本次集训队共有30多人参加,毫无疑问,你们都是很优秀的,但是由于参赛名额有限,只能选拔部分队员参加省赛。从学校的角度,总是希望选拔出最优秀的18人组成6支队伍来代表学校。但是,大家也知道,要想做到完全客观,是一件很难的事情。因为选拔的标准本身就很难统一。

为了解决这个难题,我现在把问题作了简化,现在假设每个队员都是二维平面中的一个点,用(xi,yi)坐标来表示,一个队员的能力可以用他到原点的欧几里德距离来表示。由于这种排名标准太~客观了,新队员很难有出头的机会,很多人很是郁闷。特别是一个废话不是很多、不是特别暴躁、号称盖帽高手的伪**就很有意见,他现在要求改革排名规则,并且自己提出了一套号称绝对公正的方案:

现在不是用一个点来表示一个队员了,而是用原点到该队员所在的点所构成的向量来表示一个队员。如果该向量和X正轴夹角比较小的话,就说他的能力比较高,排名就应该靠前。

这就是著名的“伪氏规则”(说实话,这规则我有点怀疑其客观性,因为我知道他的坐标是(3.1,0.1)...)

Input

输入数据包含多组测试实例,每个实例的第一行是一个整数n(n<=100),表示集训队员的人数,紧接着的一行是2*n个数,表示n个队员的坐标值(x1,y1,x2,y2...xn,yn),n为负数的时候表示输入数据的结束。

特别说明,所有的y坐标均为正数,并且所有的坐标值都是有一位小数的浮点数。

Output

对于每个测试实例,请在一行内输出排名后的坐标,坐标之间用一个空格隔开。特别地,你可以假设根据“伪氏排名规则”结果唯一。

Sample Input

3
5.0 4.0 3.1 0.1 2.0 2.0
-1

Sample Output

3.1 0.1 5.0 4.0 2.0 2.0

Author

lcy

Source

2007省赛集训队练习赛(10)_以此感谢DOOMIII

思路:

就是简单的结构体,需要考虑的特殊情况,x坐标为负值,解决办法,atan2函数

知识点:

atan2函数,使用办法,atan2(y,x)包含在math.h头文件中,atan2中的参数虽然是相反的,但是求出来的却是(x,y)的反正切值。

反正切值用弧度表示,反正切值的角度值,x 正方向,与原点与该点的连线所夹的角度,用弧度表示。

代码如下:

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
struct node{
	double x,y,t;
}s[10010];
int cmp(node a,node b)
{
	return a.t<b.t;
}
int main()
{
	int n,i;
	while(~scanf("%d",&n),n>=0)
	{
		for(i=0;i<n;i++)
		{
			scanf("%lf%lf",&s[i].x,&s[i].y);
			s[i].t=atan2(s[i].y,s[i].x);
		}
		sort(s,s+n,cmp);
		printf("%.1lf %.1lf",s[0].x,s[0].y);
		for(i=1;i<n;i++)
		{
			printf(" %.1lf %.1lf",s[i].x,s[i].y);
		}
		printf("\n");
	}
	return 0;
} 
时间: 2024-07-30 07:06:23

hdu 1785(You Are All Excellent)(数学函数atan2(y.x)返回(x,y)的反正切值)的相关文章

HDU 1785 You Are All Excellent(数学题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1785 Problem Description 本次集训队共有30多人参加,毫无疑问,你们都是很优秀的,但是由于参赛名额有限,只能选拔部分队员参加省赛.从学校的角度,总是希望选拔出最优秀的18人组成6支队伍来代表学校.但是,大家也知道,要想做到完全客观,是一件很难的事情.因为选拔的标准本身就很难统一. 为了解决这个难题,我现在把问题作了简化,现在假设每个队员都是二维平面中的一个点,用(xi,yi)坐标

HDU 1785 You Are All Excellent(斜率排序+结构体)

You Are All Excellent Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4651    Accepted Submission(s): 1558 Problem Description 本次集训队共有30多人参加,毫无疑问,你们都是很优秀的,但是由于参赛名额有限,只能选拔部分队员参加省赛.从学校的角度,总是希望选拔出

常用数学函数篇abs acos asin atan ceil cos exp frexp ldexp log pow sin sinh sqrt tan tanh

abs(计算整型数的绝对值) 相关函数 labs, fabs 表头文件 #include<stdlib.h> 定义函数 int abs (int j) 函数说明 abs()用来计算参数j的绝对值,然后将结果返回. 返回值 返回参数j的绝对值结果. 范例 #ingclude <stdlib.h> main(){ int ansert; answer = abs(-12); printf("|-12| = %d\n", answer); } 执行 |-12| = 1

javascript之数学函数

javascript数学函数其实就是Math对象,它包括属性和函数(或称方法)两部分.其中,属性主要有下列内容: Math.e:e(自然对数).Math.LN2(2的自然对数).Math.LN10(10的自然对数).Math.LOG2E(e的对数,底数为2).Math.LOG10E(e的对数,底数为10).Math.PI(π).Math.SQRT1_2(1/2的平方根值).Math.SQRT2(2的平方根值). 函数有以下18个: (1)abs函数:即Math.abs(以下同),返回一个数字的绝

Unix/Linux环境C编程入门教程(31) 数学函数带你战胜企业面试

1.函数介绍: abs()acos()asin()atan()atan2()ceil()cos()cosh()exp()frexp()ldexp()log()log10()pow()sin()sinh()sqrt()tan()tanh() abs(计算整型数的绝对值) 相关函数 labs, fabs 表头文件 #include<stdlib.h> 定义函数 int abs (int j) 函数说明 abs()用来计算参数j的绝对值,然后将结果返回. 返回值 返回参数j的绝对值结果. 范例 #i

C语言常用数学函数及其用法

转自:http://blog.sina.com.cn/s/blog_8b5a0d0001011779.html 三角函数:(所有参数必须为弧度)  1.acos 函数申明:acos  (double x);   用途:用来返回给定的 X 的反余弦函数. 2.asin 函数申明:asin  (double x);   用途:用来返回给定的 X 的反正弦函数. 3.atan 函数申明:atan  (double x);   用途:用来返回给定的 X 的反正切函数. 4.sin 函数声明:sin   

C++ 第九课 标准c数学函数

abs() 求绝对值 acos() 求反余弦 asin() 求反正弦 atan() 求反正切 atan2() 求反正切,按符号判定象限 ceil() 求不小于某值的最小整数 (求上界) cos() 求余弦 cosh() 求双曲余弦 div() 求商和余数 exp() 求e的幂 fabs() 求浮点数的绝对值 floor() 求不大于某值的最大整数 (求下界) fmod() 求模数 frexp() 求数的科学表示法形式 labs() 求长整型数的绝对值 ldexp() 以科学计数法计算 ldiv(

Oracle SQL函数之数学函数

ABS(x) [功能]返回x的绝对值 [参数]x,数字型表达式 [返回]数字 SQL> SELECT ABS(100),ABS(-100) FROM DUAL; ABS(100) ABS(-100) ---------- ---------- 100 100 sign(x) [功能]返回x的正负值 [参数]x,数字型表达式 [返回]数字,若为正值返回1,负值返回-1,0返回0 SQL> SELECT SIGN(100),SIGN(-100),SIGN(0) FROM DUAL; SIGN(10

Java语言程序设计(基础篇) 第四章 数学函数、字符和字符串

第四章 数学函数.字符和字符串 4.2 常用数学函数 方法分三类:三角函数方法(trigonometric method).指数函数方法(exponent method)和服务方法(service method) 4.4 String类型 String类型不是基本类型,而是引用类型(reference type).