题解
巧妙模拟题
这种题目要从性质下手
1.把翻转的区间实质化,我们可以发现序列中值为 1 的地方覆盖了偶数个区间, 0 的地方覆盖率奇数个区间,换句话说,如果 1 的地方覆盖区间个数为奇数,那么我们要新建立一个以它为起点的区间
怎么模拟呢?
我们维护一个到当前点的距离小于等于k的区间起点,然后统计个数
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;
}
标签:int,区间,cin,Long,--,Inversions
From: https://www.cnblogs.com/pure4knowledge/p/18124300