本题的关键就在于是否想到了set排序,记住set排序还有map,multiset,multimap的区别,且都属于红黑树的一类,以及pair的应用(本人当时做题也忘了,所以看了一下题解,就悟了),还有记得将int类型的x1,x2,y1,y2转换为浮点型(避免高精度带来的误差,如果有一个没有*1.0答案是15365)证明你错了
#include<bits/stdc++.h>
using namespace std;
typedef pair<double,double>P;
int n=20,m=21;
set<P>sl;
void check(int x1,int y1,int x2,int y2)
{
}
int main(){
cout<<sl.size()+n+m;
}
#include<bits/stdc++.h>
using namespace std;
typedef pair<double,double>P;
int n=20,m=21;
set<P>sl;
void check(int x1,int y1,int x2,int y2)
{
if(x1==x2||y1==y2)
return ;
double k,b;
k=(y2-y1)\*1.0/(x2-x1);
b=(y1\*x2-y2\*x1)\*1.0/(x2-x1);
sl.insert({k,b});}
int main(){
for(int x1=0;x1<n;x1++)
for(int y1=0;y1<m;y1++)
for(int x2=0;x2<n;x2++)
for(int y2=0;y2<m;y2++)
check(x1,y1,x2,y2);cout<<sl.size()+n+m;
}
0 回复
0 转发
0 喜欢
0 阅读



