PKU演習問メモ(6/28)
立ち直れない。おまけに風邪っぽい。
No. | 問題名 | 問題の種類および解法 | 難易度 |
---|---|---|---|
2187 | Beauty Contest | 幾何(最遠二点間距離) | ★★★☆☆ |
2187 Beauty Contest
問題概要
n(n≤50000)個の点が与えられる。これらのうちで最も遠い二点間の距離を求めよ。
解法
n個の点を全て試すとおそらくTLE.
n個の点の凸包を取りO(nlog n)、凸多角形の最遠頂点対間距離をO(n)で求めるキャリパー法を用れば全体でO(nlog n)で解ける。
上位は一桁〜二桁速いのでもっと効率の良い解法があるのかも。
ソースコード
Spaghetti sourceのコードを使用。(リンク参照)
int main() { int n; scanf("%d",&n); vector<P> pt; rep(i,n){ int x,y; cin>>x>>y; pt.pb(P(x,y)); } vector<P> ch=convex_hull(pt); cout<<convex_diameter(ch)<<endl; return 0; }