#P8221. [WFOI - 02] I wanna reverse to reserve(翻转)

    ID: 9171 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 显示难度普及+/提高− 上传者: 标签>洛谷原创Special JudgeO2优化构造洛谷月赛

[WFOI - 02] I wanna reverse to reserve(翻转)

背景

君子不器

“我最擅长解谜了,你说是吧,kid。”

“嗯...”

题目描述

kid 走进了一个 nn 行 mm 列的矩阵,不保证矩阵中有 nn 个数字 11,nn 个数字 22,…\dots , nn 个数字 mm 但 n,mn,m 均为偶数。

现有两种改变矩阵的方式:

  • 选择任意一行,将这一行上的数翻转;
  • 选择任意一列,将这一列上的数翻转。

每次操作可以选择任意一种方式。

现在需要通过若干次操作,将矩阵变为:

$$n\;行\left\{ \begin{array}{l} 1\quad2\quad3\quad\cdots\quad m\\ \\ 1\quad2\quad3\quad\cdots\quad m\\ \\ \cdots\\ \\ 1\quad2\quad3\quad\cdots\quad m\\ \end{array} \right.$$

这样才会出现下一个存档点。

你需要帮 kid 解决这个问题。

你只需要给出答案,剩下的操作就交给 Uvocde 吧!

输入格式

第一行两个正整数 nn 和 mm,以下 nn 行,每行 mm 个正整数,表示该矩阵。

输出格式

第一行一个字符串,若不可能有可行的操作方式,则输出 NO,否则输出 YES;

如果输出 YES,下一行输出一个非负整数 ansans,表示一种共需要 ansans 次操作。接下来输出 ansans 行,每行一个字符和一个数 kk(中间有空格),这个字符表示这一次操作是翻转行还是翻转列,若是对某一行进行翻转则为 0,若翻转某一列则为 1,kk 表示翻转第几行或是第几列。

若存在可行方案,则只需输出一组可行解即可(不需要使 ansans 最小),但你要使 ans≤n×mans \le n \times m。

本题采用 SPJ\text{SPJ},只要翻转操作正确即可给分。

2 4
1 2 3 4
4 3 2 1
YES
1
0 2
2 4
1 2 3 4
4 1 3 2
NO

提示

【数据范围】

本题采用 Subtask 捆绑测试。

  • Subtask #0 (20pts)\texttt{Subtask \#0 (20pts)}:最多只有 22 个数不在规定位置上;
  • Subtask #1 (20pts)\texttt{Subtask \#1 (20pts)}:n=2n=2;
  • Subtask #2 (20pts)\texttt{Subtask \#2 (20pts)}:m=2m=2;
  • Subtask #3 (40pts)\texttt{Subtask \#3 (40pts)}:1≤n≤1001\le n\le 100,1≤m≤1001\le m\le 100;

全部数据满足 1≤n≤1001\le n\le 100,1≤m≤1001\le m\le 100。