結果
問題 | No.168 ものさし |
ユーザー |
![]() |
提出日時 | 2015-03-20 00:17:43 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,247 bytes |
コンパイル時間 | 881 ms |
コンパイル使用メモリ | 97,588 KB |
実行使用メモリ | 17,180 KB |
最終ジャッジ日時 | 2024-06-28 23:32:41 |
合計ジャッジ時間 | 2,183 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 WA * 1 |
other | AC * 18 WA * 1 |
ソースコード
#include<vector>#include<map>#include<climits>#include<set>#include<queue>#include<algorithm>#include<functional>#include<numeric>#include<utility>#include<sstream>#include<iostream>#include<iomanip>#include<cstdio>#include<cmath>#include<cstdlib>#include<cctype>#include<string>#include<bitset>#include<cstring>#include<list>#include<iterator>using namespace std;typedef vector<string>vs;typedef vector<int>vi;typedef vector<vi>vvi;typedef pair<int,int>pii;typedef long long ll;typedef pair<ll,ll>pll;#define rrep(i,x,n) for(int i=(x);i<(n);++i)#define rep(i,x) rrep(i,0,(x))#define fi first#define se second#define each(i,c) for(typeof((c).begin())i=(c).begin();i!=(c).end();++i)#define all(c) (c).begin(),(c).end()#define rall(c) (c).rbegin(),(c).rend()#define pb push_backstruct union_find{private:int n;vector<int>p,r;public:void init(int n_){n=n_;p=vector<int>(n);r=vector<int>(n,0);for(int i=0;i<n;i++)p[i]=i;}union_find(int n_=0){init(n_);}int get_par(int x){return p[x]==x?x:p[x]=get_par(p[x]);}void unite(int x,int y){x=get_par(x);y=get_par(y);if(x==y)return;if(r[x]<r[y])p[x]=y;else p[y]=x;r[y]+=r[x]==r[y]?1:0;}bool same(int x,int y){return get_par(x)==get_par(y);}};struct data{ll x,y,len;data(ll a,ll b,ll c):x(a),y(b),len(c){}data(){}bool operator<(const data &d)const{if(len!=d.len)return len<d.len;if(x!=d.x)return x<d.x;return y<d.y;}};int main(){int N;cin>>N;ll x[1000],y[1000];rep(i,N)cin>>x[i]>>y[i];vector<data>V;rep(i,N)rrep(j,i+1,N)V.pb(data(i,j,(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])));sort(all(V));union_find uf(N);ll ma=0;rep(i,V.size()){data d=V[i];ma=max(ma,d.len);uf.unite(d.x,d.y);if(uf.same(0,N-1))break;}ll ub=1000000000,lb=0;while(ub-lb>1){ll mid=(ub+lb)/2;if(mid*mid>=ma)ub=mid;else lb=mid;}if(ub%10)ub=ub/10*10+10;else ub=ub/10*10;cout<<ub<<endl;return 0;}