題面統計資料
7 個討論
單點時限: 2.0 sec
記憶體限制: 256 mb
在平面上,確定乙個點的位置通常有下面兩種表示方法:
當極座標系中的極點 o 與直角座標系中的原點 o 重合,極軸 ox 與直角座標系中的 x 軸的正半軸重合,並且兩種座標系的單位長度相同,那麼平面內任意一點 p 的直角座標與極座標可以互相轉換。
例如:點 p 直角座標為:,(1,1),則對應的極座標為:(1.4142,π4)。
點 p 直角座標為:,(−1,1),則對應的極座標為:(1.4142,3π4)。
點 p 直角座標為:,(−1,−1),則對應的極座標為:(1.4142,5π4)。
點 p 直角座標為:,(1,−1),則對應的極座標為:(1.4142,7π4)。
點 p 直角座標為:,(0,1),則對應的極座標為:(1,π2)。
點 p 直角座標為:,(1,0),則對應的極座標為:(1,0)。
給出 n 個點的直角座標 (x,y),請計算出這些點對應的極座標,將這 n 個點按照極角 θ 從小到大排序,如果兩個點的極角相同,則將它們按照極徑 ρ 由大到小排序。
注意:ρ≥0,極角 0≤θ<2π
第 1 行:整數 t (1≤t≤10) 為問題數。
對於每個問題,按如下格式輸入:
第 1 行:輸入乙個正整數 n(1≤n≤1000),表示點的個數;
接下來 n 行,每行輸入兩個浮點數 x,y,表示點的直角座標,兩個數之間由乙個空格分隔。
對於每個問題,輸出一行問題的編號(0 開始編號,格式:case #0:
等)。
接下來 n行輸出排序後的點的極座標(ρ,θ),每行輸出乙個點的極座標,小數點後保留 4 位,極角採用弧度表示。
input
3output51.0 1.0
2.0 2.0
-1.0 1.0
0 1.0
1.0 0
10 -1.0
61.0 1.0
0 1.0
1.0 0
-1.0 1.0
-1.0 -1.0
1.0 -1.0
case #0:(1.0000,0.0000)
(2.8284,0.7854)
(1.4142,0.7854)
(1.0000,1.5708)
(1.4142,2.3562)
case #1:
(1.0000,4.7124)
case #2:
(1.0000,0.0000)
(1.4142,0.7854)
(1.0000,1.5708)
(1.4142,2.3562)
(1.4142,3.9270)
(1.4142,5.4978)
#include #include#include
#define pi 3.1415926
using
namespace
std;
struct
point
zuo[
1001
];int cmp(const
void *a, const
void *b)
else
return bb->p - aa->p;
}int
main()
qsort(zuo, n,
sizeof(zuo[0
]), cmp);
cout
<< "
case #
"<< ret++ << ":"
<
for (i = 0; i < n; i++)
}}/*
一些要說的話,寫cmp 拿double比較大小排序時一定要注意:
1.相等用fbs(x-y)<1e-10表示
2. 有int 返回值時,不能直接返回double相減的值,應該比較兩數大小後,用1和-1作為返回值,否則若存在小數,會返回0值令結果錯誤
3.其他,atan2函式表示區間為(-pi,pi)若要用來轉換(0,2pi),可以直接在負結果後+2pi
但是務必注意atan2(double y,double x)第乙個引數為縱座標(被坑慘了,/(ㄒoㄒ)/~~)
*/
EOJ 莫干山奇遇
出題人當然是希望出的題目有關oxx,於是想方設法給題目配上一些有關oxx的背景故事,使得它看起來不那麼無趣。但有的時候卻無法引入合適的小姐姐,使得oxx顯得非常可憐。所以出題人刪除了故事,只留下乙個枯燥乏味的數學問題。故事已刪除 給乙個長度為n的序列a1,a2,an,求乙個長度為m的序列b1,b2,...
EOJ 2794 鍊錶
大概是在10000 10的矩陣裡找兩行,兩列,使得兩行中的對應列是相同的。思路 在長列中hash,建立hash陣列,表示這個hash i 的i前乙個位置,建立鍊錶next i 指向hash value i 這樣就能o n 的找到所有相同的數的乙個鍊錶。然後搜尋兩列的時候比較當前指向的位置,當前比較短...
EOJ 3256 拼音魔法
time limit per test 1.0 seconds time limit all tests 1.0 seconds memory limit 256 megabytes 魔法學校小學一年級有一種題。就是給乙個字的拼音,給乙個聲調,讓你正確地注音。但魔法老師給了巨量的題,你不用魔法根本不...