時間限制:1000ms
記憶體限制:131072kb
接上回(本oj的《p2107. zrn神犇之還原資料》),zrn神犇還原完資料,發現機房的網路連線全部中斷了。他準備把機房的網路恢復起來。
機房裡有若干臺整齊排放的電腦和乙個路由器。路由器可以提供無線網路連線(又稱wi-fi),覆蓋區域是乙個以它為圓心的圓。並且,如果某個電腦聯網了,它可以建立wi-fi熱點,為其它電腦提供網路連線,類似地,覆蓋區域也是乙個同樣大小的圓。但是,如果某個電腦無法通過wi-fi聯網的話,它就必須通過網線連線,但是同樣可以設定wi-fi熱點。
zrn神犇已經將路由器成功地連上了外網。現在問題來了,由於機房的機子眾多,而且都沒有程式設計軟體,zrn神犇只能把各個機器的座標寫成乙個檔案,不惜他的手機流量傳給你。請你幫助他計算一下,至少要購買多少條網線吧。
第一行,四個整數n、x、y、r,分別表示有n臺電腦、路由器在機房中的座標和它的wi-fi覆蓋半徑。
以後的n行每行兩個整數xi、yi,表示該電腦的座標。
僅一行,表示最少要購買多少條網線。
10 1 1 11 21 3
1 41 5
2 62 7
3 10
3 82 10
2 8
2對於所有資料滿足n≤5000,x、y、r和xi、yi均在short int範圍內。r≥0。
資料十分有梯度!而且有坑!
【題解】
話說資料真的有坑!
不僅卡精度,sqrt過不了,而且還要long long。
其實就是簡單的並查集。
不過套了個平面模型。
這也算計算幾何?並不懂。反正我只會勾股定理。
用平方來比較即可。
注意r*r是可以提前計算的,不必重複計算,可提公升效率。
加了讀入優化2.0還是0.7s嗚嗚嗚~
1 #include2view codeusing
namespace
std;
3int n,r,pre[5010],x[5010],y[5010];4
char b[1
<<15],*s=b,*t=b;
5char
getchar2()
8int getf(int
x) 18
return
r;19}20
intread()
24while(ch>='
0'&&ch<='
9')
25return x*f;26}
27int
main()
35int ans=0;36
for (int i=0;i<=n;++i) if(pre[i]==i) ans++;
37 printf("
%d\n
",ans-1
);38
return0;
39 }
六 連線模式 1) 連線簡介
可以借用 sql 的連線來解釋 假設 表a 表b 內連線 a.name b.name 儲存共有的相同值屬性 外連線 左外連線 以 外來鍵表a 左 屬性為基準。包含a屬性整列。b屬性符合a屬性值的存入,其餘b屬性被置為 null。右外連線 以 外來鍵表b 右 屬性為基準。包含b屬性整列。b屬性符合a屬...
13 連線查詢
假設 a 表中有3條記錄,b表中有 4 條記錄 那麼,語句select from a,b 會將a,b兩張表的資料交叉拼接起來,形成 3 4 12 條記錄的結果集,此結果集叫做笛卡爾積。ora 00918 未明確定義列 改進辦法 明確列的所屬 select empno,ename,emp.deptno...
004 連線查詢
再大多數的情況下,我們都需要進行連線查詢.笛卡爾積的產生 這個就是多表查詢的的最初結果集,那麼以後我們需要作的就是從結果集中篩選出需要的結果集.篩選的方式不同,導致sql的效率不同.篩選的方式就是加入連線標準.等值連線 select 字段 from 表1 表2 where 連線條件.eg 查詢員工名...