SP3577 PARITY - Parity

题目描述

给定 $n$ 个长度均为 $m$ 的二进制字符串 $s_1, s_2, \ldots, s_n$,每个字符串还对应一个比特值 $b_i$。同时还给定一个非负整数 $k$。你的任务是判断是否存在一个大小不超过 $k$ 的索引集合 $S \subseteq \{0, 1, \ldots, m-1\}$,使得对于每个 $i = 1, 2, \ldots, n$,$b_i$ 是从字符串 $s_i$ 中根据 $S$ 中的索引取得的位的异或结果。 需要注意的是,字符串 $s_i$ 是从 0 开始编号的。异或运算的结果是:如果选定位置的 1 的个数是奇数,则结果为 1;如果是偶数,则结果为 0(特别地,空集合的异或值为 0)。举个例子,如果 $s_1 = 1010$ 且 $S = \{0, 3\}$,那么 $b_1$ 将是 $s_1$ 的第 0 位(第一个位)和第 3 位(最后一个位)的异或值,为 1。 根据给定的 $n$、$k$ 和字符串 $s_1, s_2, \ldots, s_n$ 的对应 $b_i$,寻找一个符合条件的集合 $S$,其大小不超过 $k$。如果不存在这样的集合,你需要输出一个标志来表示。

输入格式

第一行输入两个空格分隔的整数 $n$ 和 $k$,其中 $1 \leq n \leq 64$ 且 $0 \leq k \leq 10$。接下来有 $n$ 行,每行包含一个字符串 $s_i$,后接一个空格,再接一个比特值 $b_i$。在同一个测试用例中,所有字符串 $s_i$ 的长度相同,记为 $m$($1 \leq m \leq 50$)。保证 $k$ 不会超过 $m$。

输出格式

如果没有符合条件的集合 $S$,请输出 `-1` 并换行。否则,先在第一行输出一个可能的集合 $S$ 的大小。如果这个大小不为 0,那么在第二行输出该集合中的索引,以空格分隔,并换行。如果存在多个符合条件的集合可以输出,你可以选择任何一个进行输出。 **本翻译由 AI 自动生成**