結果
問題 | No.168 ものさし |
ユーザー |
![]() |
提出日時 | 2015-04-06 03:06:09 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 143 ms / 2,000 ms |
コード長 | 2,006 bytes |
コンパイル時間 | 785 ms |
コンパイル使用メモリ | 87,764 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-24 07:07:38 |
合計ジャッジ時間 | 2,407 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 19 |
ソースコード
#include <cstdio>#include <iostream>#include <vector>#include <map>#include <set>#include <string>#include <cstring>#include <sstream>#include <algorithm>#include <functional>#include <queue>#include <stack>#include <cmath>#include <iomanip>using namespace std;inline int toInt(string s) { int v; istringstream sin(s); sin >> v; return v; }template<class T> inline string toString(T x) { ostringstream sout; sout << x; return sout.str(); }template<class T> inline T sqr(T x) { return x*x; }typedef pair<int, int> P;typedef long long ll;typedef unsigned long long ull;#define rep(i,n) for(int (i) = 0;(i) < (n);(i)++)#define clr(a) memset((a), 0 ,sizeof(a))#define mclr(a) memset((a), -1 ,sizeof(a))#define all(a) (a).begin(),(a).end()#define rall(a) (a).rbegin(), (a).rend()#define sz(a) (sizeof(a))#define Fill(a,v) fill((int*)a,(int*)(a+(SZ(a)/SZ(*(a)))),v)bool cheak(int x, int y, int xMax, int yMax){ return x >= 0 && y >= 0 && xMax > x && yMax > y; }const int dx[4] = { -1, 0, 1, 0 }, dy[4] = { 0, 1, 0, -1 };const int mod = 1000000007;const int INF = 2147483647;const int M = 1010;int n;ll x[M], y[M];struct UnionFind{vector<int> data;UnionFind(int size) :data(size, -1){}bool unionSet(int x, int y){x = root(x), y = root(y);if (x != y){if (data[y] < data[x])swap(x,y);data[x] += data[y]; data[y] = x;}return x != y;}bool findSet(int x, int y){return root(x) == root(y);}int root(int x){return data[x] < 0 ? x : data[x] = root(data[x]);}int size(int x){return -data[root(x)];}};bool can(ll m){m = m*10;UnionFind uf(n);rep(i, n)rep(j, n){if (sqr(x[i] - x[j])+sqr(y[i] - y[j]) <= m*m)uf.unionSet(i,j);}if(!uf.findSet(0,n-1))return false;return true;}int main(){cin >> n;rep(i, n){cin >> x[i] >> y[i];}ll r=INF/10,l=0, m;while (1){m = (r+l)/2;if (can(m)){if (!can(m-1))break;r = m;}else{l = m;}}cout << m*10 << endl;return 0;}