#G4004. 螺旋方阵

    ID: 1060 传统题 1000ms 512MiB 尝试: 3 已通过: 3 难度: 普及− 上传者: 标签>GESP四级二维数组函数模拟2026模拟

螺旋方阵

题目描述

美术课上,同学们在一张 nn 行 mm 列的方格纸上按顺时针螺旋的顺序依次写数:从左上角(第 11 行第 11 列)开始写 11,先向右写,碰到边界或者已经写过数的格子就向右转(右 → 下 → 左 → 上 → 右……),直到写满 1∼n×m1 \sim n \times m 为止。

例如 n=3,m=4n = 3, m = 4 时,写出来是:

 1  2  3  4
10 11 12  5
 9  8  7  6

老师会提出 qq 个问题,问题有两种:

  • 1 k:数 kk 写在第几行第几列?
  • 2 x y:第 xx 行第 yy 列写的是哪个数?

请你回答所有问题。

输入格式

第一行三个整数 n,m,qn, m, q。

接下来 qq 行,每行一个问题,格式为 1 k 或 2 x y。

输出格式

对于每个问题输出一行:

  • 问题 1 k:输出两个整数,表示所在的行号和列号,中间用一个空格隔开;
  • 问题 2 x y:输出一个整数,表示该格中写的数。

样例 #1

样例输入 #1

3 4 4
1 12
2 3 1
1 6
2 2 2

样例输出 #1

2 3
9
3 4
11

样例解释

方格纸如题目描述中所示。1212 在第 22 行第 33 列;第 33 行第 11 列是 99;66 在第 33 行第 44 列;第 22 行第 22 列是 1111。

提示

数据范围

  • 对于 30%30\% 的数据:n,m≤10n, m \le 10;
  • 对于 60%60\% 的数据:n,m≤100n, m \le 100,q≤100q \le 100;
  • 对于 100%100\% 的数据:1≤n,m≤10001 \le n, m \le 1000,1≤q≤1051 \le q \le 10^5,1≤k≤n×m1 \le k \le n \times m,1≤x≤n1 \le x \le n,1≤y≤m1 \le y \le m。

提示

  • 用二维数组 a[x][y] 模拟写数的过程,可以写一个函数专门负责填数。用两个方向数组 dx[4]、dy[4] 表示右、下、左、上四个方向,「向右转」就是方向编号加 11 再对 44 取余。
  • 判断能否继续前进:下一格不能越界,也不能已经写过数(初始全为 00)。
  • 对于问题 1,如果每次都在整个二维数组里查找会超时。可以在填数的同时,用两个一维数组记下每个数所在的行和列。
  • 二维数组较大时,应定义成全局变量。