time limit per test2 seconds

memory limit per test256 megabytes

inputstandard input

outputstandard output

Kevin has just recevied his disappointing results on the USA Identification of Cows Olympiad (USAICO) in the form of a binary string of length n. Each character of Kevin’s string represents Kevin’s score on one of the n questions of the olympiad—’1’ for a correctly identified cow and ‘0’ otherwise.

However, all is not lost. Kevin is a big proponent of alternative thinking and believes that his score, instead of being the sum of his points, should be the length of the longest alternating subsequence of his string. Here, we define an alternating subsequence of a string as a not-necessarily contiguous subsequence where no two consecutive elements are equal. For example, {0, 1, 0, 1}, {1, 0, 1}, and {1, 0, 1, 0} are alternating sequences, while {1, 0, 0} and {0, 1, 0, 1, 1} are not.

Kevin, being the sneaky little puffball that he is, is willing to hack into the USAICO databases to improve his score. In order to be subtle, he decides that he will flip exactly one substring—that is, take a contiguous non-empty substring of his score and change all ‘0’s in that substring to ‘1’s and vice versa. After such an operation, Kevin wants to know the length of the longest possible alternating subsequence that his string could have.

Input

The first line contains the number of questions on the olympiad n (1 ≤ n ≤ 100 000).

The following line contains a binary string of length n representing Kevin’s results on the USAICO.

Output

Output a single integer, the length of the longest possible alternating subsequence that Kevin can create in his string after flipping a single substring.

Examples

input

8

10000011

【题目链接】:http://codeforces.com/contest/604/problem/C

【题解】



先把连续的0串和1串压缩成一位.

这样整个字符串就是符合要求的01间隔出现的串了.记录每一位压缩了几个。

这个串的长度就是初始的间隔01串的长度.

接下来.

考虑以下几种情况.

1.

某一位压缩的个数>=3;

则可以在中间位置进行取反操作(一个数就可以);

这样就把01串的长度增加了2;(而2是一次操作能够增加的最多位数);

所以直接输出就可以了.

2.有连续两位,这两位的压缩位数分别都是2;



1100这样的情况

可以变成1010

也是增加2;

所以这种情况也直接输出答案.

3.有两位,这两位压缩数都是2,且它们中间间隔的位,压缩位数都是1。



1101011

这种情况2..len-1取反

1010101

可以发现也能增加2;

所以也可以直接输出

4.有一位它的压缩位数为2.则答案增加1

5.全都是1位。答案和原来一样(不会减少的,可以全都取反啊。。这个时候全是1为了哦);



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int MAXN = 1e5+100;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0); char s[MAXN];
vector <pii> a;
int n; int main()
{
//freopen("F:\\rush.txt","r",stdin);
rei(n);
scanf("%s",s+1);
int i = 1;
bool judge1 = false,judge2 = false;
while (i <= n)
{
int j = i+1;
while (j <=n && s[j] == s[i]) j++;
a.pb(mp(s[i]-'0',j-i));
if (j-i>=3)
judge1 = true;
i = j;
}
int ans1 = a.size();
if (judge1)
{
cout << ans1+2 << endl;
return 0;
}
rep1(i,0,ans1-1)
{
if (i+1<=ans1-1)
{
int ma = max(a[i].se,a[i+1].se),mi = min(a[i].se,a[i+1].se);
if (ma ==2 && mi ==2)
{
cout << ans1+2<<endl;
return 0;
}
else
if (ma==2)
judge2 = true;
}
}
if (ans1==1 && a[0].se==2)
judge2 = true;
rep1(i,0,ans1-1)
if (a[i].se==2 && i+1<=ans1-1)
{
int j = i+1;
while (j <= ans1-1 && a[j].se==1) j++;
if (a[j].se == 2)
{
cout << ans1+2<<endl;
return 0;
}
else
judge2 = true;
}
if (judge2)
cout << ans1+1<<endl;
else
cout << ans1<<endl;
return 0;
}

【33.10%】【codeforces 604C】Alternative Thinking的更多相关文章

  1. Java Web程序设计笔记 • 【第10章 JSTL标签库】

    全部章节   >>>> 本章目录 10.1 JSTL 概述 10.1.1 JSTL 简介 10.1.1 JSTL 使用 10.1.2 实践练习 10.2 核心标签库 10.2. ...

  2. 【2017.10.13 ROS机器人操作系统】ROS系统常用术语及资源

    ROS机器人操作系统是一种后操作系统,提供了类似于软件开发中使用到的中间件的功能. ROS: Robot Operating System 机器人操作系统 Package: 功能包 Stack: 功能 ...

  3. 【 BowWow and the Timetable CodeForces - 1204A 】【思维】

    题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的次幂就增加1. 用string读入题目给定的二进制 ...

  4. 【23.33%】【codeforces 557B】Pasha and Tea

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  5. 【33.33%】【codeforces 552B】Vanya and Books

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  6. 【33.33%】【codeforces 586D】Phillip and Trains

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  7. 【33.33%】【codeforces 608C】Chain Reaction

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  8. 【25.33%】【codeforces 552D】Vanya and Triangles

    time limit per test4 seconds memory limit per test512 megabytes inputstandard input outputstandard o ...

  9. 【58.33%】【codeforces 747B】Mammoth's Genome Decoding

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

随机推荐

  1. 浅谈架构之路:单点登录 SSO

    前言:SSO 单点登录 "半吊子"的全栈工程师又来了,技术类的文章才发表了两篇,本来想先将主攻的几个系列都开个头(Nodejs.Java.前端.架构.全栈等等),无奈博客起步太晚, ...

  2. Swift具体解释之三----------函数(你想知道的都在这里)

    函数(你想知道的都在这里) 注:本文为作者自己总结.过于基础的就不再赘述 ,都是亲自測试的结果.如有错误或者遗漏的地方.欢迎指正.一起学习. 1. 函数的简单定义和调用 简单的无參函数就不再赘述 , ...

  3. Android使用蓝牙连接adb调试App

    使用WiFi连接Android设备调试APP的教程非常多,可是项目中须要使用蓝牙进行通信.所以牵扯使用蓝牙调用adb. 1.   将电脑蓝牙与手机进行配对(控制面板->设备和打印机->加入 ...

  4. 如果把父组件的数据实时的传递到子组件:用watch

    1.在子组件使用watch来监听传递给子组件的数据,然后更新子组件的数据. 2.watch和computed结合使用效果非常好. 参考链接:https://blog.csdn.net/zhouweix ...

  5. 关于使用toFixed()函数时报错"toFixed() is not a function"的问题

    toFixed()函数只有数字类型的参数才可使用,字符串类型的参数需用parseFloat或者parseInt转换后再使用

  6. vim学习2

    进入插入模式: 在插入模式下删除: 寄存器

  7. 本地 oracle 安装文件夹满触发 ORA-7445 [_memmove()+64] 导致Instance Crashed 的事故

    近期处理了一个问题,原因是因为命中ORA-600 [kole_t2u], [34] - description, bugs 导致 在udump 文件夹下大量转储 出cdmp 文件, 然后这些 cdmp ...

  8. 【习题 6-6 UVA - 12166 】Equilibrium Mobile

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举一个秤砣的重量不变. 某一个秤砣的重量不变之后. 所有秤砣的重量就固定了. 因为它的兄弟节点的重量要和它一样. 则父亲节点的重量 ...

  9. debian 9 安装后需做的几件事

    debian 9 安装后需做的几件事 安装环境:X86 >> Debian 9 Linux/GNU apt源更新 注意连上有线网络 刚安装好的debian系统中,/etc/apt/sour ...

  10. android问题及其解决-优化listView卡顿和怎样禁用ListView的fling

    问题解决-优化listView卡顿和怎样禁用ListView的fling 前戏非常长,转载请保留出处:http://blog.csdn.net/u012123160/article/details/4 ...