Submission #658175

#TimeUsernameProblemLanguageResultExecution timeMemory
658175RichemCircle selection (APIO18_circle_selection)C++14
7 / 100
3096 ms21136 KiB
#include <iostream>
#include <unordered_map>
#include <algorithm>
#include <vector>
#define int long long

using namespace std;

const int MAX_CERCLE = 3e5+42, INF = 1e9;

struct Cercle{
    int xCentre, yCentre, rayon, id;

    bool operator<(Cercle autre) {
        if(rayon == autre.rayon)
            return id < autre.id;
        return rayon > autre.rayon;
    }

    bool intersecte(Cercle autre) {
        int xDist = xCentre - autre.xCentre, yDist = yCentre - autre.yCentre;
        int rDist = rayon + autre.rayon;

        return xDist * xDist + yDist * yDist <= rDist * rDist;
    }
};

int nbCercle;
Cercle cercle[MAX_CERCLE];

void input() {
    cin >> nbCercle;

    for(int idCercle = 0; idCercle < nbCercle; idCercle++) {
        cin >> cercle[idCercle].xCentre >> cercle[idCercle].yCentre >> cercle[idCercle].rayon;
        cercle[idCercle].id = idCercle;
    }
    sort(cercle, cercle + nbCercle);
}

bool enleve[MAX_CERCLE] = {0};
int quiEnleve[MAX_CERCLE];

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    input();

    for(int grand = 0; grand < nbCercle; grand++) {
        if(enleve[grand])
            continue;

        for(int autre = 0; autre < nbCercle; autre++) {
            if(cercle[grand].intersecte(cercle[autre]) && !enleve[autre]) {
                enleve[autre] = 1;
                quiEnleve[cercle[autre].id] = cercle[grand].id;
            } 
        }
    }

    for(int i = 0; i < nbCercle; i++) {
        cout << quiEnleve[i]+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...