我是靠谱客的博主 斯文唇彩,最近开发中收集的这篇文章主要介绍CodeForces 1732B Ugu 题解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题意翻译

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 题解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部