포럼
문제 USACO0440

홈에 빠지다

설명

농부 존이 최근 농장의 크기를 넓혀서, 소들의 관점에서 농장은 사실상 무한히 크다! 소들은 농장의 방목 구역을 정사각형 "칸"들로 이루어진 무한한 2차원 격자로 생각하며, 각 칸은 맛있는 풀로 채워져 있다(각 칸을 무한한 체스판의 정사각형이라고 생각하자). 농부 존의 소 \(N\)마리(\(1\le N\le 1000\))는 각각 서로 다른 칸에서 출발하며, 일부는 북쪽을, 일부는 동쪽을 바라보고 시작한다.

매시간, 각 소는 다음 중 하나를 한다.

  • 현재 칸의 풀이 이미 다른 소에게 먹혔다면 멈춘다(그리고 그때부터 계속 멈춰 있는다).
  • 현재 칸의 풀을 모두 먹고 바라보는 방향으로 한 칸 앞으로 이동한다.

따라서 시간이 지나면 각 소는 자기 뒤에 빈 칸들로 이루어진 황량한 "홈(rut)"을 남긴다.

두 소가 같은 이동에서 풀이 있는 같은 칸으로 이동하면, 두 소는 그 칸을 공유하고 다음 시간에 각자의 방향으로 계속 이동한다.

농부 존은 풀 뜯기를 멈춘 소들을 보면 기분이 좋지 않아서, 멈춘 소들에 대해 누구를 탓해야 할지 알고 싶어 한다. 소 \(b\)가 소 \(a\)가 원래 풀을 먹었던 칸에서 멈추면, 소 \(a\)가 소 \(b\)를 멈추게 했다고 한다. 또한 소 \(a\)가 소 \(b\)를 멈추게 했고 소 \(b\)가 소 \(c\)를 멈추게 했다면, 소 \(a\)도 소 \(c\)를 멈추게 했다고 한다(즉, "멈추게 함" 관계는 추이적이다). 각 소는 자신이 멈추게 한 소의 수만큼 비난을 받는다. 각 소에게 돌아가는 비난의 양, 즉 그 소가 멈추게 한 소의 수를 계산하시오.

문제 제공: Brian Dean

제약

배점

  • 테스트 케이스 2-5에서는 모든 좌표가 최대 \(2000\)이다.
  • 테스트 케이스 6-10에서는 추가 제약이 없다.

문제 제공: Brian Dean

입력 형식

첫째 줄에 \(N\)이 주어진다. 다음 \(N\)개의 줄 각각에는 소의 시작 위치가 주어지는데, N(북쪽을 바라봄) 또는 E(동쪽을 바라봄)인 문자 하나와 칸의 좌표를 나타내는 두 음이 아닌 정수 \(x\), \(y\)(\(0\le x\le 10^9\), \(0\le y\le 10^9\))로 이루어진다. 모든 \(x\) 좌표는 서로 다르며, \(y\) 좌표도 마찬가지로 서로 다르다.

출력 형식

\(N\)개의 줄을 출력한다. 출력의 \(i\)번째 줄에는 입력의 \(i\)번째 소에게 돌아가는 비난의 양을 출력한다.

예제 1
입력
6
E 3 5
N 5 3
E 4 6
E 10 4
N 11 1
E 9 2
출력
0
0
1
2
1
0
설명

In this example, cow 3 stops cow 2, cow 4 stops cow 5, and cow 5 stops cow 6. By transitivity,
cow 4 also stops cow 6.

문제 정보

riseoj 작성

출처 올림피아드 > USACO > 2020-2021 > December > Silver

태그

평가 및 의견

Stuck in a Rut

개요
출제자 난이도 Unrated 레이팅 미적용 의견 0 / 1 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

Stuck in a Rut

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8