//辨别不同直线,斜率k和截距b,用set去重
//小数有误差如何区别?
//方法一(good)计算用更高精度double,存储时舍去高位精度(有误差),即存储用float
//方法二两者差小于目标精度的更后两位,如精度1e-6,则,k1-k2<1e-8; 但是需要提前排序;(y总解法)
set [HTML_REMOVED] ss;//不知道怎么编辑,这行放下去就会全文失去代码效果,原文是定义一个set嵌套PII,
#include <iostream>
#include <set>
using namespace std;
typedef pair<float,float> PII;
int main()
{
for(int x1=1;x1<=20;x1++)//四重循环,遍历四个坐标
for(int y1=1;y1<=21;y1++)
for(int x2=1;x2<=20;x2++)
for(int y2=1;y2<=21;y2++)
{
if(x1!=x2)//垂直直线无斜率,竖线需单独计算
{
double k= (double )(y2-y1)/(x2-x1);//斜率
double b = (double)y1-k*x1;//截距
ss.insert({k,b});//注意set嵌套pair的插入方式
}
}
cout <<ss.size()+20;//20为竖线条数,即x轴点数,不是用y轴算
return 0;
}