• Educational Codeforces Round 96 (Rated for Div. 2) D. String Deletion


    前缀和,从左向右,如果当前的前缀和大于1的时候,++ans

    如果当前的前缀和等于1,则从距当前最近的前缀和处减一

    #include<bits/stdc++.h>
    #define rep(i, n) for(int i=0;i!=n;++i)
    #define per(i, n) for(int i=n-1;i>=0;--i)
    #define Rep(i, sta, n) for(int i=sta;i!=n;++i)
    #define rep1(i, n) for(int i=1;i<=n;++i)
    #define per1(i, n) for(int i=n;i>=1;--i)
    #define inf (0x3f3f3f3f)
    #define llinf (1e18)
    #define ALL(A) A.begin(),A.end()
    #define SIZE(A) ((int)A.size())
    #define MOD (1e9 + 7)
    #define pu push
    #define pb push_back
    #define mp make_pair
    #define eps 1e-7
    #define fi first
    #define sc second
    #define SORT(x) sort(x.begin(),x.end())
    #define ERASE(x) x.erase(unique(x.begin(),x.end()),x.end())
    #define POSL(x,v) (lower_bound(x.begin(),x.end(),v)-x.begin())
    #define POSU(x,v) (upper_bound(x.begin(),x.end(),v)-x.begin())
    typedef long long i64;
    using namespace std;
    template<typename T> using twin = pair<T, T>;
    void solve()
    {
        vector<int> vec;
        int n, cnt = 0;  cin >> n;
        string str; cin >> str;
        int cnt0 = 0,cnt1 = 0;
        for(int i=0;i!=n;++i){
            if(str[i] == '1'){
                ++cnt1;
                if(i > 0 && str[i-1] == '0'){
                    vec.pb(cnt0);
                    cnt0 = 0;
                }
            }else{
                ++cnt0;
                if(i > 0 && str[i-1] == '1'){
                    vec.pb(cnt1);
                    cnt1 = 0;
                }
            }
        }
        if(cnt0)    vec.pb(cnt0);
        if(cnt1)    vec.pb(cnt1);
        //important     从前往后贪心
        int len = SIZE(vec), ans = 0;
        for(int i=0;i!=len;++i)
            ans = min(i + 1, vec[i] - 1 + ans);
        ans += ((len - ans + 1) >> 1);
        cout << ans << endl;
    }
    int main() {
        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int t;  cin >> t;
        while(t--)
            solve();   
        return 0;
    }
    

      

  • 相关阅读:
    UNDO表空间的ORA1122错误解决(二)转
    Oracle 碎片整理
    如何解决Ora00600 4194错误转自eygle
    Oracle维护常用sql语句
    ORA01152: file 1 was not restored from a sufficiently old backup
    oracle的一些信息抽取脚本.sql
    Flash Recovery Area空间不足导致数据库不能打开
    HP—UNIX的信息收集脚本
    详细解读 STATSPACK 报告
    OLTP和OLAP
  • 原文地址:https://www.cnblogs.com/newstartCY/p/13821492.html
Copyright © 2020-2023  润新知