結果
問題 | No.1265 Balloon Survival |
ユーザー |
![]() |
提出日時 | 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;}