圓錐玩具
問題描述
xqz小朋友家中堆積了好多好多種玩具,其中一種便是圓錐玩具。他經常將這類玩具混亂的擺在地上,欣賞內在的排列美。
他先把圓錐垂直放在地面上。這些圓錐都有一個特點,就是它的半徑等於高度,且內部是空心的,底面也是空的。xqz小朋友有時會將其中的一些小的圓錐玩具放到比它大的圓錐玩具裏,如果一個圓錐玩具不被另外任意一個圓錐完全包裹着,xqz就會格外喜歡它(…)。
你的任務便是幫助xqz小朋友找出所有他格外喜歡的玩具。(特別的,如果兩個圓錐的底面相切,小的圓錐也算被包裹着)爲了簡化模型,我們將地面抽象成二維平面。
輸入文件
第一行一個正整數N,表示玩具個數。
接下來N行,每行3個實數,ri,xi,yi,表示圓錐底面的半徑和座標。(其中hi=ri,hi表示圓錐的高度),第i行爲第i個玩具。
輸入數據僅保證任意兩個圓錐的底面不相交且不重合,不保證不相切。
輸出文件
第一行一個數M,表示xqz格外喜歡的玩具的個數。
第二行M個數,輸出玩具的編號,從小到大輸出,以空格隔開。
輸入樣例
5
1 0 -2
3 0 3
10 0 0
1 0 1.5
10 50 50
輸出樣例
2
3 5
數據規模和約定
對於20%的數據,N ≤ 500。
對於100%的數據,N ≤ 100000,-109 ≤ ri,xi,yi ≤ 109,ri爲正數。
本來要用平衡樹的一道題,被LZN樹給解決了,瞬間壓了代碼,有興趣的同學可以去試試打平衡樹。
本樹由LZN大牛發明,故命名爲LZN樹......
LZN樹核心思想:
以每個圓的最左邊的端點爲第一關鍵字,半徑爲第2關鍵字,快排一便。
然後從左至右搜,一旦超出範圍即可BREAK。
效率的話,我用多組數據測試過了,雖然理論複雜度是N^2,但由於LZN樹的特殊優化性,可以將實際複雜度壓至理論的1/12000左右,甚至超過了打平衡樹的同學,在所有測試點中,平均比平衡樹快大約2倍,感謝LZN大牛!
猥瑣的標程:
友情鏈接:http://blog.csdn.net/woshitanwei/archive/2011/05/20/6434582.aspx