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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值