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 翻译