zoukankan      html  css  js  c++  java
  • 牛客小白月赛4-I-合唱队形

    https://www.nowcoder.com/acm/contest/134/I

        做法,2个人交换位置肯定是男和女交换,枚举全部男生就可以了。

        一共就三种情况,第一种是n个人全部是女生,那最长连续女生就是n了,第二种是,当前枚举到的男生,左边连续女生的个数+右边连续女生的个数等于总的女生数量,连续长度就是l[i-1]+r[i+1],第三种是,当前枚举到的男生,左边连续女生的个数+右边连续女生的个数不等于总的女生数量,那就可以拿这2个联通块以外的女生和该男生交换位置,连续长度为l[i-1]+r[i+1]+1

    l[i]表示:当i位置为男生时为值0,当为女生时表示此女生为从左往右连续女生的最后一个,值为连续女生的个数。r[i]也是一样

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 100005
    int n,wn=0,mx=0;
    char s[maxn];
    int l[maxn],r[maxn];
    int main()
    {
        cin>>n>>s+1;
        l[0]=0;
        r[n+1]=0;
        for(int i=1;i<=n;i++)
        {
            if(s[i]=='0')
            {
                l[i]=l[i-1]+1;
                wn++;
            }
            else
                l[i]=0;
        }
        for(int i=n;i>=1;i--)
        {
            if(s[i]=='0')
            {
                r[i]=r[i+1]+1;
            }
            else
                r[i]=0;
        }
        
        if(n==wn) {cout<<wn<<endl; return 0;}
        for(int i=1;i<=n;i++)
            if(s[i]=='1')
            {
                if((l[i-1]+r[i+1])==wn)
                    mx=max(mx,l[i-1]+r[i+1]);
                else
                    mx=max(mx,l[i-1]+r[i+1]+1);
            }
        cout<<mx<<endl;
        return 0;
    
    }
    


  • 相关阅读:
    网页Tab控件
    ivy在eclipse中的重新加载
    es删除文档或者删除索引
    es修改数据
    es中插入数据
    创建es索引-格式化和非格式化
    MySQL常用字符串函数
    python各种类型转换
    python 3.4读取输入参数
    python异常捕获异常堆栈输出
  • 原文地址:https://www.cnblogs.com/eason9906/p/11755094.html
Copyright © 2011-2022 走看看