程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 1785(You Are All Excellent)(數學函數atan2(y.x)返回(x,y)的反正切值)

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

編輯:C++入門知識

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
#include
#include
using namespace std;
struct node{
	double x,y,t;
}s[10010];
int cmp(node a,node b)
{
	return a.t=0)
	{
		for(i=0;i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved