본문 바로가기
백준브실골/Geometry

백준 5180, 피자!

by oculis 2023. 2. 15.

내 옆의 개발자, LINT 를 오픈하였습니다.

웹사이트가 필요하면 언제든 연락주세요.

주식 가격을 예측하고 랭크를 올리는 커뮤니티, 오떨 을 오픈하였습니다.

지금 접속하고 예측을 시작해보세요.

728x90

개요

문제 링크
골드 3, Geometry
포함하는 특정점의 개수가 같고 크기가 같도록 원을 나누는 최대 개수


접근

  1. 요상한 애드혹 문제, 틀왜맞이 절로 나왔다.
  2. 이분탐색이나, 스위핑, 별의 별 방법을 다 생각해봤지만 N수가 적어서 그냥 for문을 돌면서 다 체크해주면 통과한다.
  3. 다 체크란 어떻게 하냐? n부터 2까지 조각을 쪼갤 건데, 시작을 0부터 2π/n까지 하고, 개수가 모두 같으면 조각수를 출력해주면 된다. 즉 4중 for문 돌려주면 된다.

Pseudo code

for (piece = n~2)
    angle_diff = 2pi/piece
    for (start = 0~angle_diff)
        for (i = 0~piece)
            piece_start = start + i * angle_diff
            piece_end = start + (i+1) * angle_diff

            count = 0
            for (j = 0~n)
                if (piece_start <= angle[i] < piece_end)
                    count++
        if (count가 모두 같으면)
            answer = piece

Source code

#include <iostream>
using namespace std;

using ld = double;
#define PI 3.1415926535

const int N = 210;
int n;
ld a[N], eps = 0.001;

int count(ld t1, ld t2) {
    int cnt = 0;
    if (2*PI < t2)
        t2 -= 2*PI;
    for (int i=0; i<n; i++) {
        if (t1 <= a[i] && a[i] < t2)
            cnt++;
        else if (t2 < t1)
            if (a[i] < t2 || t1 <= a[i])
                cnt++;
    }
    return cnt;
}

int counta(ld s, ld dt, int n) {
    int cnt = count(s,s+dt);
    for (int i=1; i<n; i++)
        if (count(s+i*dt, s+(i+1)*dt)!=cnt)
            return 0;
    return 1;
}

int valid(int n) {
    ld dt = 2*PI/n;
    for (ld s=0; s<dt; s+=eps)
        if (counta(s, dt, n))
            return 1;
    return 0;
}

int test() {
    ld r;
    cin >> n;
    for (int i=0; i<n; i++)
        cin >> a[i] >> r;
    for (int i=n; i>=2; i--)
        if (valid(i))
            return i;
    return 1;
}

int main() {
    int t;
    cin >> t;
    for (int i=1; i<=t; i++)
        cout << "Data Set " << i << ": " << test() << " slices\n\n";
}
728x90

'백준브실골 > Geometry' 카테고리의 다른 글

백준 1435, 네 점  (2) 2023.02.21
백준 14604, Over Fitting (Small)  (0) 2023.02.18
백준 13847, Geometry?! Why Not??  (0) 2023.02.18
백준 2778, 측량사 지윤  (0) 2023.02.15
백준 2013, 선그리기  (0) 2023.02.14
백준 2773, 바깥 삼각형의 중심  (0) 2023.02.14
백준 16115, 팬이에요  (0) 2023.02.08
백준 1430, 공격  (0) 2023.02.08

댓글