蓝桥杯题目----平面拆分(set去重 pair 直线分平面的交点)
作者:互联网
算法:set的数组去重,防止有相同直线误算交点.
步骤:1.把有斜率,截距的组合存到set数组中.
2.指针it指向s数组中第一个组合(每个组合里有first second) 把first的值都放到a数组里,second的值都放到b数组里.
3.交点查询:逐个查找目前的线,遍历之前的线.把焦点存放到数组中.
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
double A[N], B[N];
int main(){
int n; cin>>n;
pair<double, double> p;
set<pair<double, double>> s; //利用set自动去重功能筛选掉重边
for(int i = 0; i < n; i++){
cin >> p.first >> p.second ;
s.insert(p);
}
int i = 0;
set<pair<double,double>>::iterator it=s.begin(); //it相当于指针
while(it!=s.end()) //s.end set容器最后一个元素
{
A[i] = it->first;
B[i] = it->second;
it++,i++;
}
long long ans = 2;
for(int i = 1;i<s.size();i++) //现在的线
{
set<pair<double,double>> pos; //存放交点
for(int j=0;j<=i-1;j++)//遍历之前的线,寻找焦点
{
double a1=A[i],b1=B[i];
double a2=A[j],b2=B[j];
if(a1==a2) continue;
p.first = (b2-b1)/(a2-a1);
p.second = a1*(b2-b1)/(a2-a1)+b1;
pos.insert(p);
}
ans+=pos.size()+1;
}
printf("%d\n",ans);
return 0;
}
标签:----,set,a1,int,蓝桥,second,数组,平面,first 来源: https://blog.csdn.net/Findprincess/article/details/123211141