CF1979D.Fixing a Binary String

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定一个长度为 nn 的二进制字符串 ss,仅包含 00 和 11。你可以恰好执行一次如下操作:

  1. 选择一个整数 pp(1≤p≤n1 \le p \le n)。
  2. 翻转子串 s1s2…sps_1 s_2 \ldots s_p。此步骤后,字符串 s1s2…sns_1 s_2 \ldots s_n 变为 spsp−1…s1sp+1sp+2…sns_p s_{p-1} \ldots s_1 s_{p+1} s_{p+2} \ldots s_n。
  3. 然后,将字符串 ss 向左循环移动 pp 次。此步骤后,原始字符串 s1s2…sns_1s_2 \ldots s_n 变为 sp+1sp+2…snspsp−1…s1s_{p+1}s_{p+2} \ldots s_n s_p s_{p-1} \ldots s_1。

例如,对字符串 110001100110 选择 p=3p=3 执行操作,第二步后字符串变为 011001100110,第三步后变为 001100110011。

一个字符串 ss 被称为 kk-proper,当且仅当满足以下两个条件:

  • s1=s2=…=sks_1=s_2=\ldots=s_k;
  • 对于任意 ii(1≤i≤n−k1 \le i \le n - k),都有 si+k≠sis_{i+k} \neq s_i。

例如,当 k=3k=3 时,字符串 000、111000111 和 111000 是 kk-proper 的,而 000000、001100 和 1110000 不是。

给定一个整数 kk,且 kk 是 nn 的约数。请你找到一个整数 pp(1≤p≤n1 \le p \le n),使得经过上述操作后,字符串 ss 变为 kk-proper,或者判断是否不可能实现。注意,即使字符串初始时已经是 kk-proper,也必须恰好执行一次操作。

输入格式

每组测试数据包含多组测试用例。第一行包含一个整数 tt(1≤t≤1041 \le t \le 10^4),表示测试用例的数量。接下来是每组测试用例的描述。

每组测试用例的第一行包含两个整数 nn 和 kk(1≤k≤n1 \le k \le n,2≤n≤1052 \le n \le 10^5),表示字符串 ss 的长度和 kk 的值。保证 kk 是 nn 的约数。

每组测试用例的第二行包含一个长度为 nn 的二进制字符串 ss,仅包含字符 00 和 11。

保证所有测试用例中 nn 的总和不超过 2⋅1052 \cdot 10^5。

输出格式

对于每组测试用例,输出一个整数——使字符串变为 kk-proper 的 pp 值,或者如果无法实现则输出 −1-1。

如果有多个解,输出任意一个即可。

输入输出样例

  • 输入#1

    7
    8 4
    11100001
    4 2
    1110
    12 3
    111000100011
    5 5
    00000
    6 1
    101001
    8 4
    01110001
    12 2
    110001100110

    输出#1

    3
    -1
    7
    5
    4
    -1
    3

说明/提示

在第一个测试用例中,若选择 p=3p=3 执行操作,第二步后字符串变为 11100001,第三步后变为 00001111。该字符串是 44-proper 的。

在第二个测试用例中,可以证明不存在任何操作能使字符串变为 22-proper。

在第三个测试用例中,若选择 p=7p=7 执行操作,第二步后字符串变为 100011100011,第三步后变为 000111000111。该字符串是 33-proper 的。

在第四个测试用例中,无论选择哪个 pp,操作后字符串都能变为 55-proper。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页