Submission #815630

#TimeUsernameProblemLanguageResultExecution timeMemory
815630OzyCircle selection (APIO18_circle_selection)C++17
7 / 100
79 ms1752 KiB
#include <bits/stdc++.h>
using namespace std;
#define lli long long int
#define debug(a) cout << #a <<  " = " << a << endl
#define debugsl(a) cout << #a << " = " << a << ", "
#define rep(i,a,b) for(int i = (a); i <= (b); i++)
#define repa(i,a,b) for(int i = (a); i >= (b); i--)
#define pll pair<lli,lli> 

#define MAX 5000
//para el vector de orden
#define id second

struct x {
    lli x;
    lli y;
    lli r;
};

lli n;
lli res[MAX+2],vis[MAX+2];
x circulo[MAX+2];
vector<pll> orden;

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

    cin >> n;
    rep(i,1,n) {
        cin >> circulo[i].x >> circulo[i].y >> circulo[i].r;
        orden.push_back({-circulo[i].r, i});
    }
    sort(orden.begin(), orden.end());

    for (auto yo : orden) {
        for(auto otro : orden) {

            if (vis[otro.id]) continue;
            if (otro.id == yo.id) {
                res[yo.id] = yo.id;
                break;
            }

            lli a = circulo[yo.id].x - circulo[otro.id].x;
            lli b = circulo[yo.id].y - circulo[otro.id].y;
            a *= a;
            b *= b;
            lli c = circulo[yo.id].r + circulo[otro.id].r;
            c *= c;

            if (c >= (a+b)) {
                res[yo.id] = otro.id;
                vis[yo.id] = 1;
                break;
            } 
        }
    }

    rep(i,1,n) cout << res[i] << ' ';

    return 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...