제출 #59932

#제출 시각아이디문제언어결과실행 시간메모리
59932Flugan42원 고르기 (APIO18_circle_selection)C++14
7 / 100
3066 ms16832 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<ll> vi;
typedef pair<ll,ll> ii;
typedef vector<ii> vii;
#define rep(i,a,b) for(int i = a; i < b; i++)
#define per(i,a,b) for(int i = a; i >= b; i--)
#define inf 1000000000000000000
#define sz(x) (ll)(x).size()
#define all(x) x.begin(),x.end()

struct circle {
  ll x,y,r,id;
} ;
vector< circle > inp;
vi vis;
circle _;
ll n;

bool mysort(circle a, circle b){
  if (a.r == b.r) return a.id < b.id;
  return a.r > b.r;
}

ld dist(ll i, ll j){
  ll dx = inp[i].x-inp[j].x, dy = inp[i].y-inp[j].y;
  return sqrt(ld(dx*dx)+ld(dy*dy));
}

int main(){
  cin >> n; inp.assign(n,_);
  rep(i,0,n){
    cin >> inp[i].x >> inp[i].y >> inp[i].r;
    inp[i].id = i;
  }
  sort(all(inp),mysort);
  vis.assign(n,-1);
  rep(i,0,n){
    if (vis[i] != -1) continue;
    rep(j,0,n){
      if (vis[j] != -1) continue;
      if (dist(i,j) <= inp[i].r+inp[j].r) vis[j] = inp[i].id;
    }
  }
  vi res; res.assign(n,0);
  rep(i,0,n){
    res[inp[i].id] = vis[i];
  }
  rep(i,0,n) cout << res[i]+1 << " ";
  cout << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...