Решение задачи Суперцентральная точка с Codeforces

Без пояснения   Просмотров: 24


Однажды Вася нарисовал на листке бумаги декартову систему координат и отметил некоторое множество точек (x 1, y 1), (x 2, y 2), ..., (x n, y n). Для некоторой фиксированной точки (x, y) из данного множества определим понятия соседей:

точка (x', y') называется правым соседом для (x, y), если x' > x и y' = y
точка (x', y') называется левым соседом для (x, y), если x' < x и y' = y
точка (x', y') называется нижним соседом для (x, y), если x' = x и y' < y
точка (x', y') называется верхним соседом для (x, y), если x' = x и y' > y
Точку (x, y) из данного множества назовем суперцентральной, если среди точек этого множества у нее есть хотя бы один верхний, хотя бы один нижний, хотя бы один левый и хотя бы один правый сосед.

Вася нарисовал очень много точек на листке. Вручную анализировать рисунок очень сложно, поэтому Вася попросил Вас помочь ему. Ваша задача — найти количество суперцентральных точек среди заданного множества.

Код

#include<bits/stdc++.h>
using namespace std;
int n,x[500],y[500],u,l,r,d,ans;
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
		cin>>x[i]>>y[i];
	for(int i=0;i<n;i++)
	{
		d=u=r=l=0;
		for(int j=0;j<n;j++)
		{
			if(x[i]==x[j]&&y[i]<y[j])
				d=1;
			if(x[i]==x[j]&&y[i]>y[j])
				u=1;
			if(y[i]==y[j]&&x[i]<x[j])
				l=1;
			if(y[i]==y[j]&&x[i]>x[j])
				r=1;
		}
		if(d+u+l+r==4)
			ans++;
	}
	cout<<ans;
	return 0;
}

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться