Codeforces Round #226 (Div. 2) B. Bear and Strings

B. Bear and Strings
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

The bear has a string s = s1s2... s|s| (record |s| is the string's length), consisting of lowercase English letters. The bear wants to count the number of such pairs of indices i, j (1 ≤ i ≤ j ≤ |s|), that string x(i, j) = sisi + 1... sj contains at least one string "bear" as a substring.

String x(i, j) contains string "bear", if there is such index k (i ≤ k ≤ j - 3), that sk = bsk + 1 = esk + 2 = ask + 3 = r.

Help the bear cope with the given problem.

Input

The first line contains a non-empty string s (1 ≤ |s| ≤ 5000). It is guaranteed that the string only consists of lowercase English letters.

Output

Print a single number — the answer to the problem.

Sample test(s)
input
bearbtear
output
6
input
bearaabearc
output
20
Note

In the first sample, the following pairs (i, j) match: (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9).

In the second sample, the following pairs (i, j) match: (1,  4), (1,  5), (1,  6), (1,  7), (1,  8), (1,  9), (1,  10), (1,  11), (2,  10), (2,  11), (3,  10), (3,  11), (4,  10), (4,  11), (5,  10), (5,  11), (6,  10), (6,  11), (7,  10), (7,  11).


做了这么多场第一次被黑害羞 附上截图:

本来还想着这次rating应该会有所进步吧,结果华丽丽被黑了。。。
最关键的是我没在第一时间注意到,当我交第三题的时候才看到
导致我改过来的时候已经快结束了。。。这次肯定又要跌骂人

题目还是比较简单的,找到公式就好。
我的公式是:ans += (i+1-times)*(k-i-3)
i是当前“bear”出现处i对应的下标
k是str.size(),之所以不用str.size();是因为在循环中,用str.size()每次都要计算
times代表上次出现bear处b的下标,初始化为0;
另外我的下标是从0开始的,请看客们对号入座哈


又改了一下,因为题目还没判出来,不知道改的对不对
刚刚发现我过了,好多人都wa掉了,不知道是不是和我之前犯的一样的错
感谢黑我的兄弟可怜可怜

之前的代码是没有考虑输入字符串长度小于4的情况。

先贴上代码睡觉吧,明天再看
#include <iostream>
#include <string>
#include <vector>
#define rep(i,j,k) for(int i=(j); i<k; i++)
#define long long ll
using namespace std;
int main(void){
    
    string str;
    while(cin >> str){
     int ans = 0;
     int times = 0;
     int k = str.size();
     if(k>3){
      for(int i=0; i<k-3; ++i)
       if(str[i]=='b'&&str[i+1]=='e'&&str[i+2]=='a'&&str[i+3]=='r'){
        ans += (i+1-times)*(str.size()-i-3);
        times = i+1;
       }
     }
     cout << ans << endl;
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值