E. Long Inversions

原题链接

题解

巧妙模拟题
1.n5000 所以可以暴力枚举k
2.把翻转的区间具象化,我们可以发现序列中值为 1 的地方覆盖了偶数个区间, 0 的地方覆盖率奇数个区间
所以我们遍历字符串的时候,在遇到的第一个0开始建立以其为左端点的区间,如果遇到 1 的区间覆盖数为奇数,那就再建立一层以其为左端点区间

code

#include<bits/stdc++.h>
using namespace std;
int n;
char s[5005];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        cin>>n;
        cin>>(s+1);
        for(int k=n;k>=1;k--)
        {
            int layer=0;
            queue<int> q;
            int flag=1;
            for(int i=1;i<=n;i++)
            {
                if(s[i]-48==layer%2)
                {
                    layer++;
                    q.push(i);
                    if(n-i+1<k)
                    {
                        flag=0;
                        break;
                    }
                }
                if(q.size()&&i-q.front()+1==k)
                {
                    q.pop();
                    layer--;
                }
            }
            if(flag)
            {
                cout<<k<<endl;
                break;
            }
        }
    }
    return 0;
}

posted @   纯粹的  阅读(168)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示