結果
問題 | No.1265 Balloon Survival |
ユーザー | umezo |
提出日時 | 2020-10-23 23:18:25 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 799 ms / 2,000 ms |
コード長 | 1,220 bytes |
コンパイル時間 | 2,116 ms |
コンパイル使用メモリ | 211,324 KB |
最終ジャッジ日時 | 2025-01-15 14:01:03 |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 32 |
ソースコード
#define rep(i,n) for (int i=0;i<(int)(n);i++) #define ALL(v) v.begin(),v.end() typedef long long ll; #include <bits/stdc++.h> using namespace std; const int INF=1e9+7; int main(){ int n; cin>>n; vector<ll> X(n),Y(n); rep(i,n) cin>>X[i]>>Y[i]; if(n==1){ cout<<0<<endl; return 0; } if(n==2){ cout<<1<<endl; return 0; } vector<vector<ll>> A(n,vector<ll>(n)); vector<ll> B; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ A[i][j]=(X[i]-X[j])*(X[i]-X[j])+(Y[i]-Y[j])*(Y[i]-Y[j]); B.push_back(A[i][j]); } } sort(ALL(B)); B.erase(unique(ALL(B)),B.end()); set<tuple<int,int,int>> s; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ A[i][j]=lower_bound(ALL(B),A[i][j])-B.begin(); s.insert({A[i][j],i,j}); } } vector<int> D(1010,1); int rem=n; int cnt=0; for(auto x:s){ if(rem==1) break; else if(rem==2){ cnt++; break; } int a=get<1>(x); int b=get<2>(x); int c=get<0>(x); if(D[a]==0 || D[b]==0) continue; else if(a==0 && D[b]==1){ D[b]=0; rem--; cnt++; continue; } else{ D[a]=0,D[b]=0; rem-=2; } } cout<<cnt<<endl; return 0; }