空间几何题目列表

平面几何

https://www.lanqiao.cn/problems/503/learning/?page=1&first_category_id=1&sort=students_count&name=平面切分

  • 解释:
    重点在于线段的去重和交点的去重
  • 代码
    #include <iostream>
    #include <set>
    using namespace std;
    typedef pair<double, double> pei;
    const int MAX = 1e5 + 5;
    
    int N;
    double A[MAX];
    double B[MAX];
    struct point{
        double x, y;
        point(double x, double y):x(x), y(y){
    
        }
        bool operator < (const point& p1) const{
            return x < p1.x;
        }
    };
    
    int main()
    {
        // 请在此输入您的代码
        cin >> N;
        for(int i = 0; i < N; i++) {
            cin >> A[i] >> B[i];
        }
        set<pei> st;
        
        int ans = 1;//记得一开始是一个面
        for(int i = 0; i < N; i++) {
            if(st.count(pei(A[i], B[i]))) {
                continue;
            }
            //说明这里的不重合
            int index = 0;
            set<point> pt;
            for(auto it : st) {
                double a = A[i], b = B[i], c = it.first, d = it.second;
                if(a == c) {
                    continue;
                }
                point newp((d - b)/(a - c), (a*d - b*c)/(a - c));
                if(pt.count(newp)) {
                    continue;
                }
                index++;
                pt.insert(newp);
            }
            st.insert(pei(A[i], B[i]));
            ans += index + 1;
        }
        cout << ans;
        return 0;
    
    }
    
posted @ 2023-10-16 12:30  铜锣湾陈昊男  阅读(15)  评论(0)    收藏  举报