CF1979D.Fixing a Binary String
普及+/提高
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定一个长度为 n 的二进制字符串 s,仅包含 0 和 1。你可以恰好执行一次如下操作:
- 选择一个整数 p(1≤p≤n)。
- 翻转子串 s1s2…sp。此步骤后,字符串 s1s2…sn 变为 spsp−1…s1sp+1sp+2…sn。
- 然后,将字符串 s 向左循环移动 p 次。此步骤后,原始字符串 s1s2…sn 变为 sp+1sp+2…snspsp−1…s1。
例如,对字符串 110001100110 选择 p=3 执行操作,第二步后字符串变为 011001100110,第三步后变为 001100110011。
一个字符串 s 被称为 k-proper,当且仅当满足以下两个条件:
- s1=s2=…=sk;
- 对于任意 i(1≤i≤n−k),都有 si+k=si。
例如,当 k=3 时,字符串 000、111000111 和 111000 是 k-proper 的,而 000000、001100 和 1110000 不是。
给定一个整数 k,且 k 是 n 的约数。请你找到一个整数 p(1≤p≤n),使得经过上述操作后,字符串 s 变为 k-proper,或者判断是否不可能实现。注意,即使字符串初始时已经是 k-proper,也必须恰好执行一次操作。
输入格式
每组测试数据包含多组测试用例。第一行包含一个整数 t(1≤t≤104),表示测试用例的数量。接下来是每组测试用例的描述。
每组测试用例的第一行包含两个整数 n 和 k(1≤k≤n,2≤n≤105),表示字符串 s 的长度和 k 的值。保证 k 是 n 的约数。
每组测试用例的第二行包含一个长度为 n 的二进制字符串 s,仅包含字符 0 和 1。
保证所有测试用例中 n 的总和不超过 2⋅105。
输出格式
对于每组测试用例,输出一个整数——使字符串变为 k-proper 的 p 值,或者如果无法实现则输出 −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=3 执行操作,第二步后字符串变为 11100001,第三步后变为 00001111。该字符串是 4-proper 的。
在第二个测试用例中,可以证明不存在任何操作能使字符串变为 2-proper。
在第三个测试用例中,若选择 p=7 执行操作,第二步后字符串变为 100011100011,第三步后变为 000111000111。该字符串是 3-proper 的。
在第四个测试用例中,无论选择哪个 p,操作后字符串都能变为 5-proper。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?