试题 历届试题 平面切分
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
平面上有n 条直线,其中第i 条直线是y=ai*x+bi 。
请计算这些直线将平面分成了几个部分。
输入格式
第一行包含一个整数n 。
以下N行,每行包含两个整数ai,bi 。
输出格式
一个整数代表答案。
样例输入
3
1 1
2 2
3 3
Data
样例输出
6
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
long double s[1010][2];
bool book[1010];
ll ans;
pair<long double,long double>p;
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;++i){
scanf("%ld%ld",&s[i][0],&s[i][1]);
set<pair<long double,long double> >points;
for(int j=0;j<i;++j){
if(book[j]) continue;
if(s[i][0]==s[j][0]){
if(s[i][1]==s[j][1]){
book[i]=true;
break;
}
else continue;
}
p.first=(s[j][1]-s[i][1])/(s[i][0]-s[j][0]);
p.second=s[i][0]*p.first+s[i][1];
points.insert(p);
}
if(!book[i]) ans+=points.size()+1;
}
printf("%ld\n",ans+1);
return 0;
}
pair的应用:某大佬博客
set的应用:bd