Codeforces Round #558 (Div. 2) C2 - Power Transmission (Hard Edition) (相交)
程序员文章站
2022-06-05 13:46:51
...
没想到会在这地方复习初中数学hhh
因为直接相除会卡精度,所以转换成斜截式,判断a,b即可
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;
}
上一篇: 关于片云的详细介绍
下一篇: 【单调】理想的正方形