제출 #252458

#제출 시각아이디문제언어결과실행 시간메모리
252458amoo_safar원 고르기 (APIO18_circle_selection)C++14
7 / 100
166 ms768 KiB
// Null
#include <bits/stdc++.h>

#define pb push_back
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define debug(x) cerr << #x << " : " << x << '\n'

using namespace std;

typedef long long ll;
typedef long double ld;
typedef string str;
typedef pair<ll, ll> pll;

const ll Mod = 1000000007LL;
const int N = 5e3 + 10;
const ll Inf = 2242545357980376863LL;
const ll Log = 30;

ll x[N], y[N], r[N];
ll ans[N];

int main(){
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	ll n;
	cin >> n;
	for(int i = 1; i <= n; i++){
		cin >> x[i] >> y[i] >> r[i];
	}
	while(true){
		int idx = -1;
		int mx = -1;
		for(int i = n; i >= 1; i--){
			if(ans[i]) continue;
			if(r[i] >= mx){
				idx = i;
				mx = r[i];
			}
		}
		if(idx == -1) break;

		for(int i = 1; i <= n; i++){
			if(ans[i]) continue;
			ll dis = (x[i] - x[idx]) * (x[i] - x[idx]) + (y[i] - y[idx]) * (y[i] - y[idx]);
			ll rq = r[i] * r[i] + r[idx] * r[idx] + 2 * r[i] * r[idx];
			if(rq >= dis) ans[i] = idx;
		}
	}

	for(int i = 1; i <= n; i++) cout << ans[i] << ' ';
	cout << '\n';
	return 0;
}
/*
11
9 9 2
13 2 1
11 8 2
3 3 2
3 12 1
12 14 1
9 8 5
2 8 2
5 2 1
14 4 2
14 14 1

*/	
#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...