返回题解分享
讨论 / 题解分享/ 帖子详情

直线(结果填空) - 题解

本题的关键就在于是否想到了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)

{

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 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!