2020年牛客算法入门课练习赛1 不平行的直线 set去重

链接:https://ac.nowcoder.com/acm/contest/5773/B
来源:牛客网

题目描述
在坐标纸上有N个不重合的点,两两可以连一个线段并延伸成直线,请问在这些直线里最多能选出多少条使得他们两两不平行也不重合。

输入描述:

第1行: 输入1个正整数:N

第2…N+1行:第i+1行是两个用空格隔开的整数,为点i的坐标(Xi,Yi)

输出描述:

输出1个整数,为最多的互不平行的直线数目。

示例1
输入
复制

3
1 0
-2 0
0 0

输出
复制

1

备注:

N≤200,−1000≤Xi,Yi≤1000N \leq 200,-1000 \leq X_i,Y_i \leq 1000N≤200,−1000≤Xi​,Yi​≤1000



就是问有多少种斜率,用 s t d : : s e t std::set std::set自动去重就好了

scanf("%d ", &n);
for(int i=1; i<=n; i++) {
	scanf("%lf %lf ", x+i, y+i);
}
set<double> seta;
int s = 0; //竖线情况
for(int i=1; i<=n; i++) {
	for(int k=i+1; k<=n; k++) {
		if(i != k) {
			if(x[i] == x[k]) {
				s = true;
				continue ;
			}
			double xl = (y[k]-y[i])/(x[k]-x[i]);
			seta.insert(xl);
		}
	}
}
printf("%d\n", seta.size()+s);

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务