poj 3668

来源:互联网 发布:分离音频的软件 编辑:程序博客网 时间:2024/05/16 07:53

给你n个点,两点之间可以连一条直线,求直线不能有平行的,求有几条这样的直线

先将每两个点的斜率求出来,排序,,最后求不同的斜率数,水题,注意斜率不存在的情况


#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define max 0x3f3f3f3fint cmp(double a,double b){    return a<b;}int main(){    int j,n,i;    double x[201],y[201];    double k[20001];    scanf("%d",&n);    for(i=1;i<=n;i++)        scanf("%lf%lf",&x[i],&y[i]);    int m=0;    for(i=1;i<n;i++)        for(j=i+1;j<=n;j++)        {            if(x[i]==x[j])   /// 斜率不存在时 ,要注意                k[++m]=max;            else k[++m]=(y[i]-y[j])/(x[i]-x[j]);        }    sort(k+1,k+1+m,cmp);//    for(i=1;i<=m;i++)//        cout<<k[i]<<"_+";//    cout<<endl;    int ans=1;    for(i=2;i<=m;i++)        if(k[i]!=k[i-1])       求不同斜率的直线数        ans++;    printf("%d\n",ans);    return 0;}



0 0
原创粉丝点击