zoukankan      html  css  js  c++  java
  • Crazy Binary String<Map法>

    #include<cstdio>
    #include<iostream>
    #include<map>
    using namespace std;
    map<int,int>k;
    int max(int x,int y){
        if(x>=y){
            return x;
        }else{
            return y;
        }
    }
    int min(int x,int y){
        if(x>=y){
            return y;
        }return x;
    }
    int main(){
        int a=0,b=0;
        int n;
        int maxn=0;
        cin>>n;
        k[0]=0;
        char s;
        for(int i=1;i<=n;i++){
            cin>>s;
            if(s=='1'){
                a++;
            }else{
                b++;
            }
            if(k.find(a-b)==k.end()){ 
                k[a-b]=i;
            }else{
                maxn=max(maxn,i-k[a-b]);
            }
            
        }
        cout<<maxn<<" "<<min(a,b)*2;
        
    }

     题目的大体意思就是求一个字符串的子串和子序列中1与0相等的最大值。

    对于子序列还比较简单,直接开始的时候判读一个字符串中最小的是1还是0,然后乘2就可。

    子串一开始我想用前缀和,但是感觉N*N的复杂度会T,所以发一次map法

    这道题是Upc的一道题的简化版..

  • 相关阅读:
    ConcurrentHashMap源码阅读
    java中Scanner类nextLine()和next()的区别和使用方法
    setuid
    lsattr
    设置umask
    touch
    od
    vi 搜索
    nl
    cat 参数
  • 原文地址:https://www.cnblogs.com/Fylsea/p/11244732.html
Copyright © 2011-2022 走看看