結果
問題 | No.94 圏外です。(EASY) |
ユーザー | koyopro |
提出日時 | 2015-10-01 17:06:20 |
言語 | C++11 (gcc 11.4.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,307 bytes |
コンパイル時間 | 1,371 ms |
コンパイル使用メモリ | 168,408 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-19 18:53:52 |
合計ジャッジ時間 | 1,974 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,376 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 1 ms
5,376 KB |
testcase_04 | WA | - |
testcase_05 | WA | - |
testcase_06 | WA | - |
testcase_07 | WA | - |
testcase_08 | WA | - |
testcase_09 | WA | - |
testcase_10 | WA | - |
testcase_11 | WA | - |
testcase_12 | WA | - |
testcase_13 | WA | - |
testcase_14 | WA | - |
testcase_15 | WA | - |
testcase_16 | WA | - |
testcase_17 | WA | - |
testcase_18 | WA | - |
testcase_19 | AC | 6 ms
5,376 KB |
testcase_20 | WA | - |
testcase_21 | AC | 1 ms
5,376 KB |
ソースコード
#include "bits/stdc++.h" using namespace std; #define REP(i, n) for(int i=0; i<(n); i++) #define FOR(i, a, b) for(int i=(a);i<(b);i++) struct obj { int x, y, u; }; int N; vector<obj> os; int distance2(int i, int j) { return pow(os[i].x - os[j].x, 2) + pow(os[i].y - os[j].y, 2); } int root(int i) { if (os[i].u == i) return i; return os[i].u = root(os[i].u); } void join(int i, int j) { os[root(i)].u = os[root(j)].u; } double maxdis(int u) { double maxd = 0; vector<int> ui; REP(i,N) if (root(i) == u) ui.push_back(i); // 面倒なので総当り REP(i,ui.size()) { FOR(j,i+1,ui.size()) { maxd = max(maxd, sqrt(distance2(i,j))); } } return maxd + 2; } signed main() { cin >> N; os.resize(N); REP(i,N) { cin >> os[i].x >> os[i].y; os[i].u = i; } // Union-Find木 REP(i,N) { FOR(j,i+1,N) { if (root(i) == root(j)) continue; if (distance2(i,j) <= 100) { join(i,j); } } } // それぞれの連結グラフについて最大距離を求める double maxd = (N > 0) ? 2.0 : 1.0; REP(i,N) { if (root(i) != i) continue; maxd = max(maxd, maxdis(i)); } printf("%.14f\n", maxd); return 0; }