题目链接:http://codeforces.com/problemset/problem/385/B

题目意思:给定一条只有小写英文组成的序列,需要找出至少包含一个“bear”的单词的子序列个数。注意,子序列的下标编号是连续的,也就是sisi + 1... sj ,不是这种sisk... sj 。(k!=i+1)

我的做法是每找到一个“bear”就计算出它的组合数,累加所有找到的“bear ”组合数即为答案。假设序列长度为len,先用string中的substr()来找出单词“bear”中“b”的下标(i),然后计算出这个单词之前(i个,因为下标是从0开始的)和之后有多少个字母(len-1-(i+3))。组合数由3个部分组成:(1)i个字母+“bear”  (2)“bear"+ len-1-(i+3) 个字母  (3)i个字母+“bear” + len-1-(i+3) 个字母。注意,计算这3个部分的组合数,不是简单的 i*t2 + i + t2,因为会有重复!!!拿“wwbearwbearo”这个例子来说,第一个遇到的“bear”组合数是21,没有错误(其中所有组合数中包括"wwbearwbear",  "wwbearwbearo", "wbearwbear", "wbearwbearo","bearwbear","bearwbearo" 这6个),然而到了第二个遇到的“bear” ,如果还是这样算的话,这6个组合数会被重复计算,实质上第2个“bear”前的字母不再是7个(wwbearw),而是4个(earw),即从第一个“bear”中的第2个"e"到第2个“bear”的字母数。所以我们需要引入多一个j,保存当前第i个“bear“前的第i-1个“bear”的“e”这个下标。注意,初始j 的值为0.

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string>
using namespace std; string s, t; int main()
{
int i, j, cnt, len, t1, t2;
cin >> s;
j = cnt = ;
len = s.size();
for (i = ; i < len; i++)
{
t = s.substr(i, ); // 从序列中找4个连续的字母
if (t == "bear")
{
cnt++; // 统计单个的bear数,不是组合数(组合数中不包括单个的bear!)
if (i == ) // 前面没有字母
t1 = len--(i+); // 后面有多少个字母
else
{
t2 = len--(i+);
t1 = (i-j) * t2 + i-j + t2; // 组合数由3个部分组成
}
cnt += t1;
j = i+; // 保存上一个“bear”的“e”的下标
i += ; // 一个“bear”占4个字符
}
}
printf("%d\n", cnt);
return ;
}

codeforces B. Bear and Strings 解题报告的更多相关文章

  1. Codeforces 385B Bear and Strings

    题目链接:Codeforces 385B Bear and Strings 记录下每一个bear的起始位置和终止位置,然后扫一遍记录下来的结构体数组,过程中用一个变量记录上一个扫过的位置,用来去重. ...

  2. Codeforces Educational Round 92 赛后解题报告(A-G)

    Codeforces Educational Round 92 赛后解题报告 惨 huayucaiji 惨 A. LCM Problem 赛前:A题嘛,总归简单的咯 赛后:A题这种**题居然想了20m ...

  3. codeforces 476C.Dreamoon and Sums 解题报告

    题目链接:http://codeforces.com/problemset/problem/476/C 题目意思:给出两个数:a 和 b,要求算出 (x/b) / (x%b) == k,其中 k 的取 ...

  4. Codeforces Round #382 (Div. 2) 解题报告

    CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...

  5. codeforces C. Vasily the Bear and Sequence 解题报告

    题目链接:http://codeforces.com/problemset/problem/336/C 题目意思:给出一个递增的正整数序列 a1, a2, ..., an,要求从中选出一堆数b1, b ...

  6. codeforces A. Vasily the Bear and Triangle 解题报告

    题目链接:http://codeforces.com/problemset/problem/336/A 好简单的一条数学题,是8月9日的.比赛中没有做出来,今天看,从pupil变成Newbie了,那个 ...

  7. codeforces 507B. Amr and Pins 解题报告

    题目链接:http://codeforces.com/problemset/problem/507/B 题目意思:给出圆的半径,以及圆心坐标和最终圆心要到达的坐标位置.问最少步数是多少.移动见下图.( ...

  8. codeforces 500B.New Year Permutation 解题报告

    题目链接:http://codeforces.com/problemset/problem/500/B 题目意思:给出一个含有 n 个数的排列:p1, p2, ..., pn-1, pn.紧接着是一个 ...

  9. codeforces B. Xenia and Ringroad 解题报告

    题目链接:http://codeforces.com/problemset/problem/339/B 题目理解不难,这句是解题的关键 In order to complete the i-th ta ...

随机推荐

  1. rocketMQ--搭建demo的坑

    果然不出所料,搭建起来就有坑 ,客户端经典的connection 11911的错误 在我的环境上解决方法加一行配置 brokerClusterName = DefaultClusterbrokerNa ...

  2. Redis 数据结构解析和命令指南

    命令參考文档:redis commands - 你或许已经知道Redis并非简单的key-value存储.实际上他是一个数据结构server.支持不同类型的值. 也就是说.你不必只把字符串当作键所指向 ...

  3. Direct2D教程(二)来看D2D世界中的Hello,World

    引子 任何一门语言的第一个教程几乎都是Hello,world.我们也不例外,但是这里不是教大家打印Hello,world,而是编写一个简单的D2D绘制程序,让大家对Direct2D的程序结构及编程方法 ...

  4. uva 11127(暴力)

    题意:给出一个字符串,包含0.1.*,当中×是能够替换成0或者1的,假设字符串的某个子串S有SSS这种连续反复3次出现,不是Triple-free串,问给出的字符串能够形成多少个非Triple-fre ...

  5. Distinct Subsequences(不同子序列的个数)——b字符串在a字符串中出现的次数、动态规划

    Given a string S and a string T, count the number of distinct subsequences ofT inS. A subsequence of ...

  6. java.lang.String中的trim()方法的详细说明(转)

    String.Trim()方法到底为我们做了什么,仅仅是去除字符串两端的空格吗? 一直以为Trim()方法就是把字符串两端的空格字符给删去,其实我错了,而且错的比较离谱. 首先我直接反编译String ...

  7. Jenkins和Maven构建持续集成

    真是运维的福利,不用在敲Linux命令了 须要的工具:Linux或window.Jenkins.tomcat7.Jdk.maven.项目部署的war包 1.首先从Jenkins官网下载最新的Jenki ...

  8. Python+Selenium框架设计--- Page Object Model

    POM(Page Object Model):页面对象模型,POM是一种最近几年非常流行的自动化测试模型,或者思想,POM不是一个框架,就是一个解决问题的思想.采用POM的目的,是为了解决前端中UI变 ...

  9. 在Fedora24/25中轻松安装gcc 4.9

    在Fedora24/25中轻松安装gcc 4.9 http://blog.csdn.net/u010158659/article/details/53608285 标签: gccgcc-4.9Fedo ...

  10. 在fedora25x86下编译opencv的Android版本的过程记录

    准备材料: 1. 32位的Fedora25(不建议使用64位系统----64位系统下也是可以编译的,这里为了简单起见,考虑使用32位操作系统.事实上,本人在64位操作系统下也做了尝试,也完成了编译.) ...