zoukankan      html  css  js  c++  java
  • E

    E - Binary Subsequence Rotation

    思路

    1.当s串和t串中0/1的数量不一样的时候s是不可能变化到t的。

    2.要将s串变为t串那么只有每个字符都相等情况下。为了让s串变为t串且每次操作的贡献最大,那么我们需要的是变换01或者10交替串,因为只有这样才会使我们选择的每个位上都变成与原来不同的数。比如说原来是0101那么变化后就是1010。所以我们维护连续子序列中1的最长,和连续子序列中0的最长。因为这些最长的是不可能直接与其他的0/1组成交替串的,只能一对一对的产生01串。

    ++sum,和--sum,是因为01或10相抵消的时候sum是不变的。当1或0是连续的时候sum会持续的增大或减小。保留此时最大值和最小值,差值即为所求。

    #include <bits/stdc++.h>
    #define INF 0x3f3f3f3f
    #define DOF 0x7f7f7f7f
    #define endl '
    '
    #define mem(a, b) memset(a, b, sizeof(a))
    #define debug(case, x) cout << case << "  : " << x << endl
    #define open freopen("ii.txt", "r", stdin)
    #define close freopen("oo.txt", "w", stdout)
    #define IO                       
        ios::sync_with_stdio(false); 
        cin.tie(0);                  
        cout.tie(0)
    #define pb push_back
    using namespace std;
    //#define int long long
    #define lson rt << 1
    #define rson rt << 1 | 1
    typedef long long ll;
    typedef pair<int, int> pii;
    typedef pair<long long, long long> PII;
    const int maxn = 1e6 + 10;
    
    void solve() {
        int n;cin>>n;
        string s, t;
        cin >> s >> t;
        int cnt1 = 0, cnt2 = 0;
        for (int i = 0; i < n;++i) {
            if (s[i] == '0') ++cnt1;
            if (t[i] == '0') ++cnt2;
        }
        if(cnt1!=cnt2){
            cout << -1 << endl;
            return;
        }
        int sum = 0,mi=0,ma=0;
        for (int i = 0; i < n;++i){
            if (s[i] == t[i]) continue;
            else if(s[i]=='1')
                ++sum;
            else
                --sum;
            ma = max(sum, ma);
            mi = min(mi, sum);
        }
        cout << ma - mi << endl;
    
    
    
    }
    
    int main() {
        // int t;
        // cin >> t;
        // while (t--) {
            solve();
        // }
        return 0;
    }
    
  • 相关阅读:
    OpenCascade Ray Tracing Rendering
    Create New Commands in Tcl
    OpenCascade Modeling Algorithms Fillets and Chamfers
    OpenCascade Modeling Algorithms Boolean Operations
    Construction of Primitives in Open Cascade
    Open Cascade Data Exchange STL
    Tcl Tk Introduction
    Open Cascade DataExchange IGES
    Netgen mesh library : nglib
    Hello Netgen
  • 原文地址:https://www.cnblogs.com/waryan/p/13431959.html
Copyright © 2011-2022 走看看