程序设计训练 1-3 可删除的点

题目描述

平面上有 n n n 个不同的点,没有在 Y 轴的点,检查是否存在这样一个点,将其删除后其余所有的点均位于 Y 轴的同一边。

输入格式

输入第一行包含一个正整数 n n n ( 2 < = n < = 1 0 5 2<=n<=10^5 2<=n<=105)。

接下来的 n n n 行,包含所有点的坐标,第i行包含两个整数 x i x_i xi y i y_i yi ( ∣ x i ∣ 、 ∣ y i ∣ < = 1 0 9 , x i < > 0 |x_i|、|y_i| <= 10^9,xi<>0 xiyi<=109xi<>0)。

输出格式

如果存在这样的点,则输入"Yes",否则输出"No"。

样例
输入样例
3
1 1
-1 -1
2 -1
输出样例
Yes
样例解释

在以上的输入中,删除第二个点 -1 -1,剩下的点就在 Y 轴的另外一个方向。


思路
  1. 如何存储两个数,本题我采用的是pair数组。
  2. 如何判断删除一个数对,剩下的数对是不是全部在另外一边,存在两种可能:
    1:一个是数对组中只有一个在 Y 轴的另外一边,找到这个数对,并删除,符合题意。
    2:一个是全部在 Y 轴的另外一边,删除任意一个数对不影响结果。

C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

#define x first
#define y second

const int N = 10010;
typedef pair<int, int> PII;

PII w[N];
int n;

int main() {
	cin >> n;
	
	for (int i = 0; i < n; i ++)
	{
		int a, b;
		cin >> a >> b;
		w[i] = {a, b};
	}
	
	int res = 0;
	for (int i = 0; i < n; i ++)
	{
		if (w[i].x > 0) res++;
	}
	
	if (res == 1 || res == n - 1 || res == 0 || res == n) puts("Yes");
	else puts("No");
	
	return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值