제출 #252387

#제출 시각아이디문제언어결과실행 시간메모리
252387shayan_p원 고르기 (APIO18_circle_selection)C++14
7 / 100
3081 ms8416 KiB
// And you curse yourself for things you never done

#include<bits/stdc++.h>

#define F first
#define S second
#define PB push_back
#define sz(s) int((s).size())
#define bit(n,k) (((n)>>(k))&1)

using namespace std;

typedef long long ll;
typedef pair<int,int> pii;

const int maxn = 3e5 + 10, mod = 1e9 + 7, inf = 1e9 + 10;

pair<pii, int> p[maxn];
int arr[maxn];

pii operator - (pii a, pii b){
    return {a.F - b.F, a.S - b.S};
}
pii operator + (pii a, pii b){
    return {a.F + b.F, a.S + b.S};
}
ll operator ^ (pii a, pii b){
    return 1ll * a.F * b.F + 1ll * a.S * b.S;
}

bool ok(int i, int j){
    return 1ll * (p[j].S + p[i].S) * (p[j].S + p[i].S) >= ((p[i].F - p[j].F) ^ (p[i].F - p[j].F));
}

int ans[maxn];

bool COM(int l1, int r1, int l2, int r2){
    return max(l1, l2) <= min(r1, r2);
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie();

    int n;
    cin >> n;
    for(int i = 0; i < n; i++){
	cin >> p[i].F.F >> p[i].F.S >> p[i].S;
	arr[i] = i;
    }
    sort(arr, arr + n, [](int i, int j){ return (p[i].S == p[j].S ? i > j : p[i].S < p[j].S); } );
    vector<int> vec;
    for(int i = n-1; i >= 0; i--){
	int num = 0;
	for(int x : vec)
	    num+= COM(p[ arr[i] ].F.F - p[ arr[i] ].S, p[ arr[i] ].F.F + p[ arr[i] ].S, p[x].F.F - p[x].S, p[x].F.F + p[x].S) && COM(p[ arr[i] ].F.S - p[ arr[i] ].S, p[ arr[i] ].F.S + p[ arr[i] ].S, p[x].F.S - p[x].S, p[x].F.S + p[x].S);
	assert(num <= 10);
	for(int x : vec){
	    if(ok(arr[i], x)){
		ans[arr[i]] = x + 1;
		break;
	    }
	}
	if(ans[ arr[i] ] == 0){
	    ans[ arr[i] ] = arr[i] + 1;
	    vec.PB(arr[i]);
	}
    }
    for(int i = 0; i < n; i++){
	cout << ans[i] << " ";
    }
    return cout << endl, 0;
}
#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...