題意:
分為兩種點,求兩種點之間的平面最近點對
題解:分治法。這個怎麼暴力分治都能過。。
吐槽:我用了g++ tle+wa,毛線。。。
view code
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7上面那個跑的慢8#define n 222222
9#define eps 1e-7
10#define inf 1e15
1112
using
namespace
std;
1314
struct
po15
p[n];
1920
intn,q1[n],q2[n];
2122 inline bool cmp(const po &a,const po &b)
2326
27 inline int doublecmp(double
x)28
3334 inline double get_dis(po &a,po &b)
3539
40 inline double min(double a,double
b)41
4546 inline void
read()
4754
for(int i=n+1;i<=(n<<1);i++)
5559 n<<=1;60
}6162 inline double getmindis(int l,int
r)63
77for(int i=mid+1;i<=r;i++)
7882
for(int i=1;i<=cnt1;i++)
83for(int j=1;j<=cnt2;j++)
84 mindis=min(mindis,get_dis(p[q1[i]],p[q2[j]]));
85return
mindis;86}
8788 inline void
go()
8993
94int
main()
95
這題考慮精度反而跪了。。。。無語。。。
zoj 2107/hdu 1007
view code
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 78#define n 2222222
9#define eps 1e-7
10#define inf 1e10
1112
using
namespace
std;
1314
struct
po15
p[n],q[n];
1819
intn;
2021 inline bool cmpx(const po &a,const po &b)
2225
26 inline bool cmpy(const po &a,const po &b)
2730
31 inline int doublecmp(double
x)32
3738 inline double get_dis(po &a,po &b)
3942
43 inline double min(double a,double
b)44
4849 inline void
read()
5053
54 inline double getmindis(int l,int
r)55
71return
mindis;72}
7374 inline void
go()
7579
80int
main()
81
poj 3714 平面最近點對
解題思路 在原有的分治演算法上加上標記,如果標記不同的則計算距離,不然的話就返回無窮大.用歸併排序再可以省下logn 這題要是卡資料不知道有什麼更高深的辦法.include include include include include using namespace std const int m...
POJ 3714 最近點對問題 分治法
題意 station和agent分別有n 1 n 100000 個點,求不同類別的最近點對距離。題解 這裡講的很好。include include include include include define max a b a b a b define min a b a b a b define...
poj 3714 Raid(平面最近點對)
給出兩個點集,然後求兩個點集之間的最近距離。思路 開始用的旋轉卡殼,兩個點集先求凸包,這樣就變成了兩個凸包間最近距離,但是死活tle,然後就換了平面最近點對來做,把兩個點集標記一下,判斷下是不是在同乙個點集裡就行了 include include include using namespace st...