题目链接:http://codeforces.com/problemset/problem/603/A

题意:

给定一个 $01$ 串,我们“交替子序列”为这个串的一个不连续子序列,它满足任意的两个相邻的数字不相等。

现在,我们要对这个 $01$ 串的某一段非空连续子串进行反转操作,即将这一段上的所有 $0$ 变为 $1$,所有 $1$ 变为 $0$。

然后,求问进行了有且仅有一次的反转操作后,求该串的最长交替子序列的长度。

题解:

首先,对于一个 $01$ 串,对其进行压缩操作,即将所有连续的相同的数字压缩成一个数字,例如将 $10110011$ 可以压缩成 $10101$,然后得到的这个新的串就是一个交替子序列,并且是最长的那个。

而且不难发现,对于任何 $01$ 串,一次反转操作,可以使其最长交替子序列的长度增加 $0,1,2$:

1、本身就是一个交替子序列,增加 $0$。

2、包含一个“$00$”或者“$11$”,能增加 $1$。

3、包含超过一个的“$00$”或者“$11$”,能增加 $2$(注意这种情况,两个“$00$”重叠在一起得到“$000$”也算)。

换句话说,我们只要统计所有满足 $s[i]=s[i+1](i \in [1,n-1])$ 的 $i$ 的个数就能知道有多少个“$00$”或者“$11$”。

AC代码:

#include<bits/stdc++.h>
using namespace std;
int n;
string s;
int main()
{
cin>>n>>s; int cnt=;
for(int i=;i<n-;i++) if(s[i]==s[i+]) cnt++; int res=, now=s[];
for(int i=;i<n;i++) if(s[i]!=now) res++, now=s[i]; if(cnt>=) cout<<res+<<endl;
else if(cnt==) cout<<res+<<endl;
else cout<<res<<endl;
}

Codeforces 603A - Alternative Thinking - [字符串找规律]的更多相关文章

  1. codeforces B. A and B 找规律

    Educational Codeforces Round 78 (Rated for Div. 2) 1278B - 6 B. A and B  time limit per test 1 secon ...

  2. Codeforces 870C Maximum splitting (贪心+找规律)

    <题目链接> 题目大意: 给定数字n,让你将其分成合数相加的形式,问你最多能够将其分成几个合数相加. 解题分析: 因为要将其分成合数相加的个数最多,所以自然是尽可能地将其分成尽可能小的合数 ...

  3. Codeforces Gym 100015B Ball Painting 找规律

    Ball Painting 题目连接: http://codeforces.com/gym/100015/attachments Description There are 2N white ball ...

  4. Codeforces Gym 100637B B. Lunch 找规律

    B. Lunch Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100637/problem/B Des ...

  5. Codeforces 474D Flowers (线性dp 找规律)

    D. Flowers time limit per test:1.5 seconds memory limit per test:256 megabytes We saw the little gam ...

  6. Codeforces 603A Alternative Thinking

    题意:给你一个01串,必须替换一次,且替换的为子串.问换完后,最大01串长度. #include <bits/stdc++.h> typedef long long ll; using n ...

  7. Codeforces D. Little Elephant and Interval(思维找规律数位dp)

    题目描述: Little Elephant and Interval time limit per test 2 seconds memory limit per test 256 megabytes ...

  8. codeforces D. Queue 找规律+递推

    题目链接: http://codeforces.com/problemset/problem/353/D?mobile=true H. Queue time limit per test 1 seco ...

  9. Codeforces Gym 100114 A. Hanoi tower 找规律

    A. Hanoi tower Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descript ...

随机推荐

  1. MYSQL 中query_cache_size小结

    1 原理    MySQL查询缓存保存查询返回的完整结果.当查询命中该缓存,会立刻返回结果,跳过了解析,优化和执行阶段. 查询缓存会跟踪查询中涉及的每个表,如果这写表发生变化,那么和这个表相关的所有缓 ...

  2. Atitit php vs node.js attilax总结

    Atitit php vs node.js attilax总结 1.1. 上手度  还是php 1 1.2. Node.js最大的缺点  异步回调导致可读性差..特别嵌套的时候.. 1 1.1. 上手 ...

  3. iOS开发微信支付

    现在基本所有的App都会接入支付宝支付以及微信支付,也有很多第三方提供给你 SDK帮你接入,但是这种涉及到支付的东西还是自己服务器搞来的好一些,其实搞懂了 逻辑非常的简单,下面直接给大家说说下基本流程 ...

  4. wrk压测工具使用

    介绍分为四部分 1.wrk简述 2.wrk安装 3.wrk运行参数 4.wrk高级用法 1.wrk简述 当使用ab做压测的时候发现,ab的客户端消耗很大,而且测试时性能较差,测试redis,sprin ...

  5. debian/deepin 15.3 15.4安装jdk 1.7 (或jdk 7),配置默认环境

    一.前言 Deepin 15.3是基于Debian开发的,安装jdk 1.7有所不同,默认是openjdk-8-jdk,而我们玩一些编译需要的是jdk 7. 所以本文给出安装JDK 7的教程. Dee ...

  6. Angularjs的那些事 – 视图的生命周期

    Angularjs的最主要的一个应用场景就是单页面应用(SinglePageApplication),但是SPA中会有一个明显的问题,在视图切换的时候,它只会用新视图去替换视图容器内的HTML,但如果 ...

  7. 怎样从Javaproject师成长为架构师?

      工作1-5年.当我们向老板提出加薪的时候,或者跳槽去"捡"offer的时候.我们底气够吗? 敢不敢不给涨薪就"挥一挥衣袖.不带走一个bug"?是不是提出要求 ...

  8. java-信息安全(十五)-单向认证

    原文地址 http://snowolf.iteye.com/blog/398198 接下来,我们使用第三方CA签名机构完成证书签名.     这里我们使用thawte提供的测试用21天免费ca证书.  ...

  9. springcloud-04-自定义ribbon的配置方式

    在dubbo项目中, zookeeper即注册中心帮我们实现了调度和负载均衡的能力, 这种方式被称为服务器端的负载均衡, springcloud中, 使用ribben实现的客户端负载均衡 什么是rib ...

  10. Provided id of the wrong type for class pojo.Books. Expected: class java.lang.Integer, got class java.lang.Long

    log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). log4j:WARN Please ...