Voldemort's blog

Voldemort's blog

我好菜啊

题解 CF165A 【Supercentral Point】

posted on 2020-06-07 10:38:48 | under 题解 |

题解 CF165A 【Supercentral Point】

Solution

其实这道题目非常的简单,由于 $n \le 100$ ,我们可以考虑枚举
但是怎么确定一个点的上,下,左,右的方向呢?
我们来看看这个图:

通过观察可以知道:

  • 1:如果一个点 $(x_1,y_1)$ 在另一个点 $(x,y)$ 的正上方,那么可得: $x_1 > x$, $y_1 = y$。
  • 2:如果一个点 $(x_1,y_1)$ 在另一个点 $(x,y)$ 的正下方,那么可得: $x_1 < x$, $y_1 = y$。
  • 3:如果一个点 $(x_1,y_1)$ 在另一个点 $(x,y)$ 的正左方,那么可得: $x_1 = x$, $y_1 < y$。
  • 4:如果一个点 $(x_1,y_1)$ 在另一个点 $(x,y)$ 的正右方,那么可得: $x_1 = x$, $y_1 > y$。

根据我们以上的推论,我们就可以敲代码了。

Code

#include <bits/stdc++.h>
using namespace std;

const int N = 209;

int n,a,b,c,d,ans;
int x[N],y[N];

int main() {
    scanf("%d",&n);
    for(int i = 1;i <= n;i++) {
        scanf("%d %d",&x[i],&y[i]);
    }
    for(int i = 1;i <= n;i++) {
        a = b = c = d = 0;
        for(int j = 1;j <= n;j++) {
            if(x[i] < x[j] && y[i] == y[j]) {
                a = 1;
            }
            if(x[i] > x[j] && y[i] == y[j]) {
                b = 1;
            }
            if(x[i] == x[j] && y[i] > y[j]) {
                c = 1;
            }
            if(x[i] == x[j] && y[i] < y[j]) {
                d = 1;
            }
        }
        if(a && b && d && c) ans++;
    }
    printf("%d\n",ans);
    return 0;
}