概述
题意翻译
Feyn 有一个数列,这个数列只包含 0 和 1。定义一次操作是选择一个后缀并把这个后缀的所有元素取反,求最少使用多少次操作可以让这个序列单调不降。
题目分析
因为对于连续的1和0,每次改变第一位就可以将后面的一起改变,所以可以将连续的0整合,连续的1整合,将给定串整合为一个010...01串或010...10串。
设连续1的段数个数为cnt,
当连续1的段数为1时,对第一个1操作,1次操作可将给定串变为不递减序列。
当连续1的段数大于等于2时,(cnt-1) * 2次操作可将给定串变为不递减序列。
注意:如果给定串最后一位是0,就需多进行一次操作,即(cnt-1)* 2+1次操作。
ACcode
#include<iostream>
#include<cstring>
using namespace std;
string a;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T,ans,n;
cin>>T;
while(T--)
{
int cnt=0;
cin>>n;
cin>>a;
a=" "+a;
for(int i=1;i<=n;++i)
{
if(a[i]=='1')
{
++cnt;
while(a[i]=='1'&&i<=n) ++i;
}
}
if(cnt==0)
{
cout<<"0n";
continue;
}
ans=(cnt-1)*2;
if(a[n]=='0') ++ans;
cout<<ans<<"n";
}
}
最后
以上就是斯文唇彩为你收集整理的CodeForces 1732B Ugu 题解的全部内容,希望文章能够帮你解决CodeForces 1732B Ugu 题解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复