CF229A Shifts
题目描述
给定一个包含 $n$ 行 $m$ 列的表格。表格中的每个单元格包含一个数字,0 或 1。每次操作可以选择表格中的任意一行,将该行的所有元素循环向左或向右移动一个单元格。
将一行循环向右移动一个单元格,意味着除了最后一个单元格以外的每个单元格都向右移动一格,最后一个单元格的值则移动到第一个单元格。循环向左移动类似,只是方向相反。例如,若将行 “00110” 循环向右移动一格,结果为 “00011”;若向左移动一格则结果为 “01100”。
请你计算最少需要多少次操作,可以使得某一列全部变为 1。如果无法实现,输出 $-1$。
输入格式
第一行包含两个用空格分隔的整数:$n$($1 \leq n \leq 100$)——表格的行数,以及 $m$($1 \leq m \leq 10^{4}$)——表格的列数。接下来有 $n$ 行,每行包含 $m$ 个字符“0”或“1”:第 $i$ 行的第 $j$ 个字符表示表格第 $i$ 行第 $j$ 列单元格的内容。
保证表格仅包含“0”和“1”两个字符。
输出格式
输出一个整数:为了使某一列全为 1 所需的最小操作次数。如果无法实现,输出 $-1$。
说明/提示
在第一个样例中,一种方法是:第二行向右循环移动一次,第三行向左循环移动两次。此时表格的倒数第二列将全为 1。
在第二个样例中,无论怎么移动都无法使某一列全为 1。
由 ChatGPT 5 翻译