欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Codeforces Round #558 (Div. 2) C2 - Power Transmission (Hard Edition) (相交)

程序员文章站 2022-06-05 13:46:51
...

???? ???? ????

没想到会在这地方复习初中数学hhh

因为直接相除会卡精度,所以转换成斜截式,判断a,b即可

Codeforces Round #558 (Div. 2) C2 - Power Transmission (Hard Edition) (相交)

map<pair<int,int>,set<int> >mp;
int x[MAXN],y[MAXN];
signed main()
{
    int n;cin>>n;
    rep(i,n) cin>>x[i]>>y[i];
    ll ans = 0,cnt = 0;
    for(int i = 0;i<n;++i)
    {
        for(int j= i+1;j<n;++j)
        {
            int a = x[j] - x[i],b=y[j]-y[i],c =x[i]*y[j]-x[j]*y[i];
            int g= __gcd(a,b);
            a/=g,b/=g,c/=g;
            pii tmp = make_pair(a,b);
            if(mp[tmp].find(c)==mp[tmp].end())//新出现的一条直线
            {
                ++cnt;//直线数目
                mp[tmp].insert(c);
                ans+=cnt-mp[tmp].size();//除了与他平行的全部相交
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}