1 条题解

  • 0
    @ 2025-4-19 21:53:53

    算法标签:

    模拟

    题解:

    分别以每个点为基准,计算与其他点的斜率,将斜率排序后统计斜率最多的值。

    #include <iostream>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    
    const double esp = 1e-10;
    int x[800], y[800], N;
    double k[800];
    
    int main() {
        while (cin >> N && N) {
            for (int i = 0; i < N; i++) {
                cin >> x[i] >> y[i];
            }
            int ret = 0;
            for (int i = 0; i < N; i++) {
                int cnt = 0, cinf = 0;
                for (int j = 0; j < N; j++) {
                    if (j != i) {
                        if (x[j] == x[i]) {
                            cinf++;
                        } else {
                            k[cnt++] = (y[j] - y[i]) * 1.0 / (x[j] - x[i]);
                        }
                    }
                }
                sort(k, k + cnt);
                int c = 0;
                ret = max(ret, cinf + 1);
                for (int j = 0; j < cnt; j++) {
                    if (!j || fabs(k[j] - k[j - 1]) < esp) {
                        c++;
                    } else {
                        ret = max(c + 1, ret);
                        c = 1;
                    }
                }
                ret = max(ret, c + 1);
            }
            cout << ret << endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    119
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者