不平行的直线

Posted adventurer-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不平行的直线相关的知识,希望对你有一定的参考价值。

 

题目描述

在坐标纸上有N个不重合的点,两两可以连一个线段并延伸成直线,请问在这些直线里最多能选出多少条使得他们两两不平行也不重合。

 

 

 

输入描述:

第1行: 输入1个正整数:N

第2..N+1行:第i+1行是两个用空格隔开的整数,为点i的坐标(Xi,Yi)

输出描述:

输出1个整数,为最多的互不平行的直线数目。
示例1

输入

复制
3
1 0
-2 0
0 0

输出

复制
1

备注:

 

N200,1000Xi?,Yi?1000

 

思路:枚举出所有的斜率,用set去重,注意用double类型

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
#define INF 0x3f3f3f3f
const int maxn=1e6;
double marr[maxn];
struct point
{
    double x;
    double y;
}arr[205];

double gradient(double x,double y,double w,double v)
{
    double ans;
    if(x==w)
    {
        ans=INF;
    }
    else
        ans=(y-v)/(x-w);
    return ans;
}

int main()
{
    int n; cin>>n;
    int i,j,k=0;
    for(i=0;i<n;i++)
        cin>>arr[i].x>>arr[i].y;
    for(i=0,j=1;i<=j&&j<n;)
    {
        marr[k++]=gradient(arr[i].x,arr[i].y,arr[j].x,arr[j].y);
        if(j==n-1)
        {
            i++;j=i+1;
        }else j++;
    }
    set<double>s(marr,marr+k);
    cout<<s.size()<<endl;
    return 0;
}

 

以上是关于不平行的直线的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB中如何画平行x轴或y的直线?

判断两直线是否平行

在3D空间里 求两条直线之间的距离

数学初中全部公式

在cad中怎样画平行线?

CAD标注中,如何操作让标注与直线营平行,文字也与直线平行