CF1370E.Binary Subsequence Rotation

提高+/省选-

通过率:0%

时间限制:2.00s

内存限制:256MB

AC君温馨提醒

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

题目描述

Naman has two binary strings ss and tt of length nn (a binary string is a string which only consists of the characters "0" and "1"). He wants to convert ss into tt using the following operation as few times as possible.

In one operation, he can choose any subsequence of ss and rotate it clockwise once.

For example, if s=1110100s = 1\textbf{1}101\textbf{00}, he can choose a subsequence corresponding to indices (11-based) 2,6,7{2, 6, 7 } and rotate them clockwise. The resulting string would then be s=1010110s = 1\textbf{0}101\textbf{10}.

A string aa is said to be a subsequence of string bb if aa can be obtained from bb by deleting some characters without changing the ordering of the remaining characters.

To perform a clockwise rotation on a sequence cc of size kk is to perform an operation which sets c1:=ck,c2:=c1,c3:=c2,…,ck:=ck−1c_1:=c_k, c_2:=c_1, c_3:=c_2, \ldots, c_k:=c_{k-1} simultaneously.

Determine the minimum number of operations Naman has to perform to convert ss into tt or say that it is impossible.

纳曼有两条长度为 nn 的二进制字符串 ss 和 tt(二进制字符串仅由字符 "0" 和 "1" 构成)。他希望用尽可能少的操作次数将 ss 转换为 tt。

每次操作中,他可以任选 ss 的一个子序列,并将其顺时针旋转一次。

例如,若 s=1110100s = 1\textbf{1}101\textbf{00},他可选取对应下标(从 1 开始计数)为 {2,6,7}\{2, 6, 7\} 的子序列并进行顺时针旋转,结果字符串变为 s=1010110s = 1\textbf{0}101\textbf{10}。

字符串 aa 称为字符串 bb 的子序列,当且仅当 aa 可通过从 bb 中删除若干字符(不改变其余字符的相对顺序)而得到。

对长度为 kk 的序列 cc 进行一次顺时针旋转,是指同时执行如下赋值操作:c1:=ck, c2:=c1, c3:=c2, …, ck:=ck−1c_1:=c_k,\ c_2:=c_1,\ c_3:=c_2,\ \ldots,\ c_k:=c_{k-1}。

请确定将 ss 转换为 tt 所需的最少操作次数;若不可能实现,则说明这一点。

输入格式

The first line contains a single integer nn (1≤n≤106)(1 \le n \le 10^6) — the length of the strings.

The second line contains the binary string ss of length nn.

The third line contains the binary string tt of length nn.

第一行包含一个整数 nn (1≤n≤106)(1 \le n \le 10^6) —— 字符串的长度。

第二行包含一个长度为 nn 的二进制字符串 ss。

第三行包含一个长度为 nn 的二进制字符串 tt。

输出格式

If it is impossible to convert ss to tt after any number of operations, print −1-1.

Otherwise, print the minimum number of operations required.

如果经过任意次数的操作都无法将 ss 转换为 tt,则输出 −1-1。

否则,输出所需的最少操作次数。

输入输出样例

  • 输入#1

    6
    010000
    000001

    输出#1

    1
  • 输入#2

    10
    1111100000
    0000011111

    输出#2

    5
  • 输入#3

    8
    10101010
    01010101

    输出#3

    1
  • 输入#4

    10
    1111100000
    1111100001

    输出#4

    -1

说明/提示

In the first test, Naman can choose the subsequence corresponding to indices 2,6{2, 6} and rotate it once to convert ss into tt.

In the second test, he can rotate the subsequence corresponding to all indices 55 times. It can be proved, that it is the minimum required number of operations.

In the last test, it is impossible to convert ss into tt.

在第一个测试用例中,Naman 可以选择对应下标 {2,6}\{2, 6\} 的子序列,并将其旋转一次,从而将 ss 转换为 tt。

在第二个测试用例中,他可以将对应所有下标的子序列旋转 55 次。可以证明,这是所需的最少操作次数。

在最后一个测试用例中,无法将 ss 转换为 tt。

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

首页