結果
問題 | No.168 ものさし |
ユーザー |
![]() |
提出日時 | 2017-12-28 14:22:21 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 31 ms / 2,000 ms |
コード長 | 1,300 bytes |
コンパイル時間 | 613 ms |
コンパイル使用メモリ | 71,020 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-12-24 07:22:27 |
合計ジャッジ時間 | 1,638 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 19 |
ソースコード
#include <iostream>#include <cstring>#include <utility>#include <queue>using namespace std;long long int N;long long int X[2000];long long int Y[2000];bool dp[2000];bool dfs(int a, int b, long long int x) { // xcmのものさしでPaからPbまで行けるかなbool flag = false;if (a == b) {dp[a] = true;return true;}for (int i = 0; i < N; i++) {if (i == a) continue;if (!dp[i]) {if ((X[i] - X[a])*(X[i] - X[a]) + (Y[i] - Y[a])*(Y[i] - Y[a]) <= x*x) {dp[i] = true;flag = dfs(i, b, x);if (flag) break;}}}return flag;}bool C(long long int x) { // xcmのものさしでP1からPnまで行けるかなreturn dfs(0, N-1, x);}int main(){memset(X, 0, sizeof(X));memset(Y, 0, sizeof(Y));memset(dp, false, sizeof(dp));cin >> N;for (int i = 0; i < N; i++) {cin >> X[i] >> Y[i];}long long int lb = 0;long long int ub = 2E9;long long int mid = 0;while (1) {mid = (((lb + ub) / 2) / 10) * 10;if (C(mid)) ub = mid;else lb = mid;if (ub == lb) break;else if (ub - lb == 10) {if (C(lb)) {ub = lb;break;}else {lb = ub;break;}}//cout << "u:" << ub << ",l:" << lb<< ",m:" << mid << endl;memset(dp, false , sizeof(dp));}cout << ub << endl;return 0;}