专栏文章

题解:SP3184 LINES - Game of Lines

SP3184题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miox4m3q
此快照首次捕获于
2025/12/03 02:35
3 个月前
此快照最后确认于
2025/12/03 02:35
3 个月前
查看原文

题意中译中

给定 nn 个点,这几个点两两连线,问其中存在多少条线两两不平行。

思路

两两不平行本质上就是斜率不同,所以只要计算斜率即可。
特别的,如果两个点的横坐标相同,我们可以直接设定其连线的斜率为正无穷(对的,浮点数标准里有正无穷),但是一定要写,否则这个计算结果也可能是负无穷,就会错误。
set 统计不同的数目显然非常方便。

代码

CPP
#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;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...