static pair<int, int> p[3], t;
static int N, ans[3];
static void check()
{
if (t.first < p[0].first || t.first > p[1].first ||
t.second < p[0].second || t.second > p[1].second)
ans[2] += 1;
else if (t.first > p[0].first && t.first < p[1].first &&
t.second > p[0].second && t.second < p[1].second)
ans[0] += 1;
else
ans[1] += 1;
}
static void move_to_zero()
{
if (p[0].second < p[1].second)
{
if (p[0].first < p[1].first)
{
//empty,
}
else
{
p[0].first -= (p[0].first - p[1].first);
p[1].first += (p[0].first - p[1].first);
}
}
else
{
if (p[0].first < p[1].first)
{
p[2] = p[0];
p[0] = p[1];
p[1] = p[2];
}
else
{
p[0].second -= (p[0].second - p[1].second);
p[1].second += (p[0].second - p[1].second);
}
}
}
static void solution(void)
{
for (int i = 0; i < 2; i++)
scanf("%d %d", &p[i].first, &p[i].second);
scanf("%d", &N);
move_to_zero();
for (int i = 0; i < N; i++)
{
scanf("%d %d", &t.first, &t.second);
check();
}
printf("%d %d %d\n", ans[0], ans[1], ans[2]);
memset(ans, 0, sizeof(ans));
}
직사각형을 구성하는 두 정점의 좌표는 아래와 같은 형식들로 입력 받을 수 있다.
그래서 move_to_zero() 함수는 이러한 각각의 경우들에 대해서 첫번째 케이스와 같은 형태로 좌표를 변환 해준다.
그리고 check() 함수는 이러한 상태에서 입력받은 좌표가 직사각형 외부, 내부 혹은 각 변에 걸치는지에 관해 체크해준다.