• 几何+map套set——cf1163C


    能灵活用map+set的组合就能过这题了

    /*
    分成三个步骤来做:
    1.通过点两两构造线
        by=ax+c,先求a,b,再求c,用gcd(d,b)简化 
    2.线去重:用map+pair 
    3.统计交点 
    */
    #include<bits/stdc++.h>
    #include<map>
    using namespace std;
    #define ll long long 
    #define maxn 2005
    map<pair<int,int>,set<int> > mp;
    map<pair<int,int>,set<int> >::iterator it;
    struct Node{int x,y;}p[maxn];
    
    int main(){
        ll n,ans=0,lines=0;cin>>n;
        for(int i=1;i<=n;i++)cin>>p[i].x>>p[i].y;
        for(int i=1;i<=n;i++)
            for(int j=i+1;j<=n;j++){
                int a=p[i].y-p[j].y,b=p[i].x-p[j].x;
                int d=__gcd(a,b);
                a/=d,b/=d;
                if(a<0 || a==0&&b<0){b*=-1;a*=-1;}
                int c=(ll)b*p[i].y-(ll)a*p[i].x;
                pair<int,int> p=make_pair(a,b);
                if(mp[p].find(c)==mp[p].end()){
                    ++lines;
                    mp[p].insert(c);
                    ans+=(ll)lines-mp[p].size();//所有已经存在的线-平行的线 
                }
            }
        cout<<ans<<endl;
    } 
  • 相关阅读:
    gan研究思路
    官方文档的学习
    构建Pytorch虚拟环境
    桌面显示【我的电脑】
    【VUE】计数器模块
    【品优购】字体图标定位的做法
    029垃圾分代回收机制
    03特殊for语句
    28包 package
    jdk特性
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10899650.html
Copyright © 2020-2023  润新知