首页 > 其他 > 详细

Codeforces Round #651 (Div. 2) E. Binary Subsequence Rotation(dp)

时间:2020-06-21 14:31:28      阅读:140      评论:0      收藏:0      [点我收藏+]

题目链接:https://codeforces.com/contest/1370/problem/E

题意

给出两个长为 $n$ 的 $01$ 串 $s$ 和 $t$,每次可以选择 $s$ 的一些下标,使字符只在这些下标内循环右移一个单位,问两个字符串相等至少需要循环移动多少次。

题解

无解的情况

两个字符串中的 $01$ 个数不同。

有解的情况

将 $s$ 中同一位置与 $t$ 不同的字符拿出组成一个新字符串,每次操作一定是取这个新字符串 $01010 \dots$ 或 $10101 \dots$ 的子串,所以找出新字符串中最长的连续为 $0$ 的长度和最长的不被抵消的连续为 $1$ 的长度即可。

代码

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n; string s, t; cin >> n >> s >> t;
    int zero = 0, mi = 0, mx = 0;
    for (int i = 0; i < n; i++) {
        if (s[i] != t[i]) {
            if (s[i] == 0) zero++; //zero > 0 是最长的连续为 0 的长度
            else zero--; //zero < 0 是最长的不被抵消的连续为 1 的长度
            mi = min(mi, zero);
            mx = max(mx, zero);
        }
    }
    cout << (zero == 0 ? mx - mi : -1);
}

 

Codeforces Round #651 (Div. 2) E. Binary Subsequence Rotation(dp)

原文:https://www.cnblogs.com/Kanoon/p/13172216.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!