高等程序设计训练2020-2021夏季小学期
可删除的点问题
问题描述
平面上有n个不同的点,没有在Y轴的点,检查是否存在这样一个点,将其删除后其余所有的点均位于Y轴的同一边。
输入形式
输入第一行包含一个正整数n(2<=n<=105)。
接下来的n行,包含所有点的坐标,第i行包含两个整数xi和yi(|xi|、|yi|<=109,xi<>0)。
输出形式
如果存在这样的点,则输入"Yes",否则输出"No"。
样例分析
【样例输入】
3
1 1
-1 -1
2 -1
【样例输出】
Yes
思路分析
本题很简单,因此这里思路只做简单描述
如果某个点可删除,说明只可能存在两种情况;
1:有一个点在y轴一边,其他点都在y轴的另一边;
2:所有的点都在同一边。
其他情况都是不可行的。
代码展示如下:
代码展示
#include<bits/stdc++.h>
using namespace std;
int main()
{
int N;
cin>>N;
int a[N][2];
for(int i=0;i<N;i++)
for(int j=0;j<2;j++)
cin>>a[i][j];
int zuo=0;
int you=0;
for(int i=0;i<N;i++)
{
if(a[i][0]>0)
you++;
if(a[i][0]<0)
zuo++;
}
if(zuo==1||you==1||zuo==0||you==0)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}