CF1774D Same Count One
题目描述
给定 $n$ 个长度为 $m$ 的,只包含 $0$ 和 $1$ 的数组,选择任意两个数组交换位置 $pos$ 上的数。在经过最少的操作后使得每个数组中的 $1$ 数量相等,并输出操作过程。
输入格式
第一行一个整数 $t$ $( 1 \leq t \leq 2\cdot 10^4 )$ 表示有 $t$ 组测试数据。
每组测试数据:第一行两个整数 $ n $ 和 $ m $ 。 $( 2 \leq n \leq 10^5 $ , $ 2 \leq m \leq 10^5 , \sum n\times m \le 10^6)$
接下来 $ n $ 行,每行 $ m $ 个整数( $ 0 $ 或 $ 1 $ )。
输出格式
对于每一组测试样例,若无法满足要求,输出 $ -1 $ .
否则, 第一行输出一个整数 $ k $ $ (0 \le k \le mn) $ ,即最小的操作数量。
接下来输出 $ k $ 行,每行 $ 3 $ 个整数, $ x, y, z $ $ (1 \le x, y \le n, 1 \le z \le m) $ , 表示交换 $ a_{x, z}, a_{y, z} $ : 即交换第 $ x $ 和第 $ y $ 行的第 $ z $ 个数。
说明/提示
In the first test case, it's enough to do a single operation: to swap the first element in the second and the first rows. The arrays will become $ [0, 1, 1, 0], [1, 0, 1, 0], [1, 0, 0, 1] $ , each of them contains exactly two $ 1 $ s.