蓝桥杯c++组 直线
作者:
陈平安
,
2021-04-29 19:38:07
,
所有人可见
,
阅读 966
c++B组直线
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int N=5000000; //400多个点,开500万条直线一定够用
struct Line //存储直线
{
double k,b;
bool operator<(const Line &s)const
{
if(k!=s.k) return k<s.k; //排序
return b<s.b;
}
}a[N];
int n;
int main()
{
double k,b;
for(int x1=0;x1<20;x1++)
{
for(int y1=0;y1<21;y1++)
{
for(int x2=0;x2<20;x2++)
{
for(int y2=0;y2<21;y2++)
{
if(x1!=x2) //先不算斜率不存在的
{
k=(double)(y2-y1)/(x2-x1); //这里要转化为double
b=y1-k*x1;
a[n++]={k,b};
}
}
}
}
}
sort(a,a+n);
int res=1;
for(int i=1;i<n;i++)
{
if((a[i].k-a[i-1].k)>1e-8||(a[i].b-a[i-1].b)>1e-8) //浮点型判断当前直线与上一条直线不同
res++;
}
cout<<res+20; //最后算斜率存在的
return 0;
}
其实去重用map就可以了