题解:SP3184 LINES - Game of Lines
题意中译中
给定
思路
两两不平行本质上就是斜率不同,所以只要计算斜率即可。
特别的,如果两个点的横坐标相同,我们可以直接设定其连线的斜率为正无穷(对的,浮点数标准里有正无穷),但是一定要写,否则这个计算结果也可能是负无穷,就会错误。
用 set 统计不同的数目显然非常方便。
代码
#include<bits/stdc++.h>
using namespace std;
constexpr int maxn=207;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
pair<int,int>v[maxn];
set<double>st;
int n;
while(cin>>n)
{
if(n==0)break;
for(int i=1;i<=n;i++)
cin>>v[i].first>>v[i].second;
st.clear();
for(int i=1;i<=n;i++)
{
for(int j=1;j<i;j++)
{
if(v[i].first==v[j].first)
st.insert(+INFINITY);
else st.insert((double)(v[i].second-v[j].second)/(v[i].first-v[j].first));
}
}
cout<<st.size()<<'\n';
}
return 0;
}