RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
R01562

나선형 채우기

Silver V 실버 V
난이도
2s
시간 제한
256MB
메모리 제한
0
맞았습니다!!
8
제출 수
0.0%
정답률
레이팅

의견: 0

설명

\(N \times M\) 크기의 격자가 있다. 이 격자의 모든 칸을 \(1\)부터 \(N \times M\)까지의 수로 채우려고 한다. 채우는 순서는 왼쪽 위 칸에서 시작하여 시계 방향 나선(소용돌이) 모양으로 진행한다. 즉, 처음에는 오른쪽으로 이동하면서 채우다가 격자의 경계나 이미 채워진 칸을 만나면 시계 방향(오른쪽 → 아래 → 왼쪽 → 위)으로 방향을 틀어 계속 채운다.

예를 들어 \(N = M = 3\)인 경우 격자는 다음과 같이 채워진다.

1 2 3

8 9 4

7 6 5

격자를 모두 채운 뒤, \(Q\)개의 질의가 주어진다. 각 질의는 행 번호 \(r\)와 열 번호 \(c\)로 이루어지며, 그 칸에 적힌 수가 무엇인지 답해야 한다. 행은 위에서부터, 열은 왼쪽에서부터 \(1\)번부터 센다.

제약

\(1 \le N, M \le 2{,}000\)

\(1 \le Q \le 100{,}000\)

\(1 \le r \le N\), \(1 \le c \le M\)

입력 형식

첫째 줄에 세 정수 \(N\), \(M\), \(Q\)가 공백으로 구분되어 주어진다 (\(1 \le N, M \le 2{,}000\), \(1 \le Q \le 100{,}000\)).

다음 \(Q\)개의 줄에 각각 두 정수 \(r\), \(c\)가 주어진다 (\(1 \le r \le N\), \(1 \le c \le M\)).

출력 형식

\(Q\)개의 줄을 출력한다. \(i\)번째 줄에는 \(i\)번째 질의가 가리키는 칸 \((r, c)\)에 적힌 수를 출력한다.

예제 1
입력
3 3 4
1 1
2 2
3 1
2 3
출력
1
9
7
4
설명

3x3 격자를 시계 방향 나선으로 채우면 다음과 같다.

1 2 3
8 9 4
7 6 5

(1,1)=1, (2,2)=9, (3,1)=7, (2,3)=4

예제 2
입력
2 4 3
1 4
2 1
2 4
출력
4
8
5
설명

2x4 격자를 시계 방향 나선으로 채우면 다음과 같다.

1 2 3 4
8 7 6 5

(1,4)=4, (2,1)=8, (2,4)=5

문제 정보

riseoj 작성

출처 Original

평가 및 의견

나선형 채우기

개요
출제자 난이도 Silver V 실버 V 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

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

풀이 제출

나선형 채우기

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