#P14730. [Bulgarian2018春季赛]oper
[Bulgarian2018春季赛]oper
题目描述
给定一个大小为 的方格表。它的某些格子被染成黑色,其余格子为白色。
这张表画在一张透明纸上,因此可以进行如下变换:
- 向右旋转 ;
- 向左旋转 ;
- 旋转 ;
- 竖直翻转;
- 水平翻转。
这 种变换分别用字母表示为:
R:向右旋转L:向左旋转Q:旋转V:竖直翻转H:水平翻转

展示初始方格表以及五种变换 R / L / Q / V / H 对应的效果。
我们有两类操作:
- 指定一种变换,即上述字母之一
R、L、Q、V、H; R S:给出表中的一行一列编号。如果当前状态下该位置的格子是白色,就把它染成黑色;如果是黑色,就把它染成白色。
整个正方形的坐标系从左上角开始,也就是说,最上方最左侧的格子坐标为 、。
给定 个操作。请编写程序 oper,输出最终状态中“最靠上”的 个黑色格子的坐标。
这里“最靠上”的含义是:在所有操作完成后,把所有黑色格子按以下顺序排序:
- 先按行号升序;
- 若行号相同,再按列号升序。
你需要输出排序后前 个黑色格子的坐标。
输入格式
第一行包含三个正整数 、、,分别表示:
- 方格表的大小;
- 初始时黑色格子的数量;
- 操作数。
接下来 行,每行两个正整数 、,表示一个初始为黑色的格子的坐标。
接下来 行描述操作。每行都以数字 1 或 2 开头,表示操作类型:
- 若为类型
1,则后面跟一个空格和一个字母R、L、Q、V、H之一; - 若为类型
2,则后面跟两个整数 、,表示要变色的格子坐标。
最后一行是整数 ,表示需要输出多少个格子的坐标。
输出格式
输出 行,每行两个整数,分别表示一个黑色格子的行号与列号。
输出顺序应与题目中定义的排序顺序一致。
数据范围
。
,且 不超过所有操作结束后黑色格子的数量。
样例
输入
3 3 6
1 1
3 2
3 3
1 R
1 H
2 2 1
1 V
2 1 3
1 H
2
输出
2 1
2 3
样例说明

原题样例中的两条文字说明为:
- 格子 是白色,因此把它染成黑色;
- 格子 是黑色,因此把它染成白色。
子任务
- 子任务 1(3 个测试):,类型
2的操作数不超过 。 - 子任务 2(10 个测试):,类型
2的操作数不超过 ;并且同一测试中,类型1的操作只会来自集合 或集合 之一。 - 子任务 3(10 个测试):无额外限制。