結果
| 問題 |
No.94 圏外です。(EASY)
|
| コンテスト | |
| ユーザー |
data9824
|
| 提出日時 | 2015-06-23 02:20:18 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 5 ms / 5,000 ms |
| コード長 | 1,666 bytes |
| コンパイル時間 | 821 ms |
| コンパイル使用メモリ | 82,520 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-26 07:36:04 |
| 合計ジャッジ時間 | 1,668 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 22 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <iomanip>
using namespace std;
int n;
vector<int> x, y;
vector<bool> visited;
vector<int> connectedNodes;
int getNorm(int node1, int node2) {
return (x[node1] - x[node2]) * (x[node1] - x[node2])
+ (y[node1] - y[node2]) * (y[node1] - y[node2]);
}
void findConnectedNodes(int node) {
if (visited[node]) {
return;
}
visited[node] = true;
connectedNodes.push_back(node);
for (int i = 0; i < n; ++i) {
if (node != i) {
if (getNorm(i, node) <= 10 * 10) {
findConnectedNodes(i);
}
}
}
}
int main() {
cin >> n;
x.resize(n);
y.resize(n);
for (int i = 0; i < n; ++i) {
cin >> x[i] >> y[i];
}
visited.resize(n);
double maxDistance = 0;
if (n > 0) {
for (int i = 0; i < n; ++i) {
connectedNodes.clear();
if (visited[i]) {
continue;
}
connectedNodes.push_back(i);
findConnectedNodes(i);
double distance;
if (connectedNodes.size() > 1) {
int maxNorm = 0;
pair<int, int> maxNormNodes;
for (size_t k = 0; k < connectedNodes.size(); ++k) {
for (size_t m = k + 1; m < connectedNodes.size(); ++m) {
int node1 = connectedNodes[k];
int node2 = connectedNodes[m];
int norm = getNorm(node1, node2);
if (maxNorm < norm) {
maxNorm = norm;
maxNormNodes = make_pair(node1, node2);
}
}
}
distance = sqrt(getNorm(maxNormNodes.first, maxNormNodes.second));
distance += 2.0;
} else {
distance = 2.0;
}
maxDistance = max(maxDistance, distance);
}
} else {
maxDistance = 1.0;
}
cout << fixed << setprecision(12) << maxDistance << endl;
return 0;
}
data9824