2021第十二届蓝桥杯省赛c++B组_直线

2021第十二届蓝桥杯省赛c++B组_直线

//
#include<bits/stdc++.h>
using namespace std;

struct point
{
    double x,y;
}p[25*25];

map< pair<double,double>,int >maps;

int main()
{
    int cnt=0,ans=20+21,i,j;
    double k,b;             // double 类型

    // 构造点
    for( i=0;i<20;i++ )
    {
        for( j=0;j<21;j++ )
        {
            p[cnt].x=i; p[cnt].y=j; cnt++;
        }
    }

    // 遍历两点
    for( i=0;i<cnt;i++ )
    {
        for( j=0;j<cnt;j++ )
        {
            // 特殊处理 横线和竖线
            if( p[i].x==p[j].x || p[i].y==p[j].y ) continue;

            k=( p[i].y-p[j].y )/( p[i].x-p[j].x );
            b=( p[i].x*p[j].y-p[j].x*p[i].y )/( p[i].x-p[j].x );
            // b=p[i].y-k*p[i].x;

            if( maps[ { k,b } ]==0 ) { maps[ { k,b } ]=1; ans++; }
        }
    }
    printf("%d\n",ans);

    return 0;
}

//
b=y-kx;
=y1-(y1-y2)/(x1-x2)*x1;
=( y1*x1-y1*x2 -y1*x1+y2*x1 )/( x1-x2 );
=( x1*y2-x2*y1 )/( x1-x2 );

上一篇:概率论基础


下一篇:每周练习题2