페이지

5695번: 공원점

https://www.acmicpc.net/problem/5695


#include<cstdio>
#include<algorithm>
using namespace std;
int n, res;
double x[100], y[100];
int main() {
    while (scanf("%d", &n) && n) {
        for (int i = 0; i < n; i++) scanf("%lf %lf", x + i, y + i);
        res = n > 1 ? 2 : 1;
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                for (int k = j + 1; k < n; k++) {
                    if (x[i] == x[j] && x[i] == x[k] || y[i] == y[j] && y[i] == y[k]) continue;
                    double p = ((x[i] * x[i] + y[i] * y[i])*(y[j] - y[k]) + (x[j] * x[j] + y[j] * y[j])*(y[k] - y[i]) + (x[k] * x[k] + y[k] * y[k])*(y[i] - y[j])) / ((x[k] - x[j])*y[i] + (x[i] - x[k])*y[j] + (x[j] - x[i])*y[k]) / 2,
                        q = ((x[i] * x[i] + y[i] * y[i])*(x[j] - x[k]) + (x[j] * x[j] + y[j] * y[j])*(x[k] - x[i]) + (x[k] * x[k] + y[k] * y[k])*(x[i] - x[j])) / ((y[k] - y[j])*x[i] + (y[i] - y[k])*x[j] + (y[j] - y[i])*x[k]) / 2,
                        r = (x[i] - p)*(x[i] - p) + (y[i] - q)*(y[i] - q);
                    int cnt = 0;
                    for (int l = 0; l < n; l++) cnt += abs((x[l] - p)*(x[l] - p) + (y[l] - q)*(y[l] - q) - r) < 1e-6;
                    res = max(res, cnt);
                }
            }
        }
        printf("%d\n", res);
    }
    return 0;
}

댓글 없음 :

댓글 쓰기