注意用set去重
make_pair(k,b)直接创建pair
注意double爆精度 计算公式尽量使用最原始的数据
#include<bits/stdc++.h>
using namespace std;
//求出除水平垂直的外的直线的k和b;
//用set去重
//最后结果加上m,n;
set<pair<double,double> >line;
int main()
{
int n,m;
cin>>n>>m;
double k,b;
for(double x1=0;x1<n;x1+=1.0)
{
for(double y1=0;y1<m;y1+=1.0)
{
for(double x2=0;x2<n;x2+=1.0)
{
for(double y2=0;y2<m;y2+=1.0)
{
if(x1==x2||y2==y1)
continue;
double k=(y2-y1)*1.0/(x2-x1);
double b=(y2*(x2-x1)-(y2-y1)*x2)*1.0/(x2-x1);
//可避免double爆精度
line.insert(make_pair(k,b));
}
}
}
}
int re=line.size()+m+n;
cout<<re<<endl;
return 0;
}