작성일 :

문제 링크

13684번 - Divisão da Nlogõnia

설명

기준점을 지나는 두 직선이 평면을 네 구역으로 나눌 때, 주어진 좌표가 어느 구역에 속하는지 판정하는 문제입니다.

선 위에 있으면 divisa, 그 외에는 NE, NO, SE, SO 중 하나를 출력합니다.


접근법

먼저 기준점과 쿼리 좌표를 입력받습니다.

좌표가 기준점보다 동쪽인지 서쪽인지, 북쪽인지 남쪽인지에 따라 해당 구역을 출력합니다.

만약 좌표가 기준점과 같은 행이나 열에 있으면 경계선 위이므로 divisa를 출력합니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System;

class Program {
  static void Main() {
    while (true) {
      var line = Console.ReadLine();
      if (line == null) break;
      var k = int.Parse(line);
      if (k == 0) break;

      var pivot = Console.ReadLine()!.Split();
      var n = int.Parse(pivot[0]);
      var m = int.Parse(pivot[1]);

      for (var i = 0; i < k; i++) {
        var parts = Console.ReadLine()!.Split();
        var x = int.Parse(parts[0]);
        var y = int.Parse(parts[1]);

        if (x == n || y == m) Console.WriteLine("divisa");
        else if (x > n && y > m) Console.WriteLine("NE");
        else if (x > n && y < m) Console.WriteLine("SE");
        else if (x < n && y < m) Console.WriteLine("SO");
        else Console.WriteLine("NO");
      }
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int k;
  while (cin >> k && k != 0) {
    int n, m; cin >> n >> m;
    for (int i = 0; i < k; i++) {
      int x, y; cin >> x >> y;
      if (x == n || y == m) cout << "divisa\n";
      else if (x > n && y > m) cout << "NE\n";
      else if (x > n && y < m) cout << "SE\n";
      else if (x < n && y < m) cout << "SO\n";
      else cout << "NO\n";
    }
  }

  return 0;
}