제출 #475176

#제출 시각아이디문제언어결과실행 시간메모리
475176khr03aeCircle selection (APIO18_circle_selection)C++14
7 / 100
31 ms716 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long i64;

const int MAX = 5e3 + 9;

struct Circle {
    i64 x, y;
    i64 radius;
    i64 index;
} circles[MAX];

int N, par[MAX];
bool deleted[MAX];

void init() {
    for (int i = 0; i < N; ++i) {
        par[i] = i;
        deleted[i] = false;
    }
}

bool cmp(Circle& a, Circle& b) {
    if (a.radius == b.radius)
        return a.index < b.index;
    return a.radius > b.radius;
}

bool intercept(Circle& a, Circle& b) {
    i64 dx = a.x - b.x;
    i64 dy = a.y - b.y;
    i64 dist2 = dx * dx * 1LL + dy * dy * 1LL;
    i64 r2 = (a.radius * 1LL + b.radius * 1LL) * (a.radius * 1LL + b.radius * 1LL) * 1LL;
    if (dist2 <= r2) {
        return true;
    }  else {
        return false;
    }
}

int main() {
    scanf("%d", &N);
    for (int i = 0; i < N; ++i) {
        scanf("%lld%lld%lld", &circles[i].x, &circles[i].y, &circles[i].radius);
        circles[i].index = i;
    }
    sort(circles, circles + N, cmp);
    init();
    // for (int i = 0; i < N; ++i) {
    //     printf("%d %d %d %d\n", circles[i].x, circles[i].y, circles[i].radius, circles[i].index);
    // }
    for (int i = 0; i < N; ++i) {
        int u = circles[i].index;
        if (deleted[u])
            continue;
        for (int j = i + 1; j < N; ++j) {
            int v = circles[j].index;
            if (intercept(circles[i], circles[j]) && !deleted[v]) {
                par[v] = u;
                deleted[v] = true;
            }
        }
        deleted[u] = true;
    }
    for (int i = 0; i < N; ++i) {
        printf("%d ", par[i] + 1);
    }
    printf("\n");
}

컴파일 시 표준 에러 (stderr) 메시지

circle_selection.cpp: In function 'int main()':
circle_selection.cpp:44:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   44 |     scanf("%d", &N);
      |     ~~~~~^~~~~~~~~~
circle_selection.cpp:46:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   46 |         scanf("%lld%lld%lld", &circles[i].x, &circles[i].y, &circles[i].radius);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...