cf B Bear and Strings

题意:给你一个字符串,然后找多少区间内含有“bear”,输出数目;

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5
 6 char str[5001];
 7 int pos[50001];
 8
 9 int main()
10 {
11     while(scanf("%s",str)!=EOF)
12     {
13         int k=strlen(str);
14         memset(pos,0,sizeof(pos));
15         int cnt=0;
16         for(int i=0; i+4<=k; i++)
17         {
18             if(str[i]==‘b‘&&str[i+1]==‘e‘&&str[i+2]==‘a‘&&str[i+3]==‘r‘)
19             {
20                 pos[cnt++]=i+3;
21             }
22         }
23         int ans=0;
24         int last=0;
25         for(int i=0; i<cnt; i++)
26         {
27             if(pos[i]-3==0)
28             {
29             ans+=(k-pos[i]);
30
31             last=pos[i]-3;
32             }
33             else
34             {
35                 if(i==0)
36                 {
37                     ans+=(pos[i]-3+1)*(k-pos[i]);
38                 }
39                 else
40                 ans+=(pos[i]-3-last)*(k-pos[i]);
41                 last=pos[i]-3;
42             }
43         }
44         printf("%d\n",ans);
45     }
46     return 0;
47 }

时间: 2024-11-08 23:05:23

cf B Bear and Strings的相关文章

Codeforces 385B Bear and Strings

题目链接:Codeforces 385B Bear and Strings 记录下每一个bear的起始位置和终止位置,然后扫一遍记录下来的结构体数组,过程中用一个变量记录上一个扫过的位置,用来去重. #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int MAX_N = 5000 + 100; char str[MAX_N]; struct Node

CF 574E(Bear and Drawing-2*n点阵画树)

E. Bear and Drawing time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Limak is a little bear who learns to draw. People usually start with houses, fences and flowers but why would bears do it

cf B. Bear and Compressing

B. Bear and Compressing 思路:字符串是什么样的有多种情况不定,但我们总是知道最后一个肯定是a,那么我们就可以反着推,看a是由那个序列变过来的,拿案例一的数据说,比如我们先看见ca,可以变成a,那a的上一个状态就是ca,由“ca”代替“a“,此时长度为2,还不够长,所以继续找,看“ca”中的“c”是哪个序列变过来的呢,这次我们找到了"cc“还有”ee“,同样代替,那“ca”的上一次状态就是“cca”或者“eea”此时找到,长度为n则答案加1,那这么一直寻找的过程就想到了DF

cf D Bear and Floodlight

题意:有n个灯,每个灯有一个照亮的角度,现在从点(l,0)走到点(r,0),问这个人若一直被灯照着能最多走多远? 思路:状压dp,然后通过向量旋转求出点(dp[i[,0)与灯的坐标(p[j].x,p[j].y)形成的向量然后旋转角度p[j].a,得到旋转之后的在x坐标轴上的点,然后与dp[i|(1<<j)]比较更新,找出最大值,再与右端点比较.有个情况,在旋转向量时,可能不与坐标轴有交点,你就把dp[i|(1<<j)]=r; 1 #include <cstdio> 2

codeforces 336D Vasily the Bear and Beautiful Strings(组合数学)

转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Vasily the Bear and Beautiful Strings Vasily the Bear loves beautiful strings. String s is beautiful if it meets the following criteria: String s only consists of characters 0 and 1, at that

在青岛穷游打的cf codeforces Round #318 (Div. 2) A.Bear and Elections

这场cf是暑假集训后在青岛旅游打的一场,好累..... 题意:给出一个序列,要使a[1]大于a[2]~a[n],a[1]每次可以增加一,这个一从a[2]到a[[n]里面任意一个数减一扣除,求最少的步数 思路:要不断地修改值,并从中找出最大的,可以想到优先队列,还要保存下该数的编号,要知道在队首时是a[1].还有处里一种特殊情况,详见代码 总结:这道题并不难,我用了40多分钟,主要前面太急了,一开始并没有想到是优先队列,是一些其他的想法,只要合适一个样例就下手去做,导致有很明显的bug我竟然敲完代

CF 643 E. Bear and Destroying Subtrees

E. Bear and Destroying Subtrees http://codeforces.com/problemset/problem/643/E 题意: Q个操作. 加点,在原来的树上加一个点,之后还是一棵树,初始时一个点. 让一棵子树内每条边有1/2的概率消失,然后的深度为:剩余的与子树的根联通的点中深度最大的.询问假如攻击这个点,期望深度. 分析: 可以枚举一个深度,计算概率. f[x][i]表示以x为根的子树中,深度为<=x的概率.那么答案就是$\sum_{h=1}^{MAX\

CF 1320D Reachable Strings 后缀数组

确定性解法:后缀数组 众所周知 hash 由于不能完全避免冲突常常会被 cf hacker 卡掉,此题有更稳定的解法 考虑将原串进行简化,由于只有连续的 1 会造成不确定的匹配,可以只对 0 建立一个新串 对于一段连续的 1,后面的 0 建立新字符,如果有奇数个 1 就建立 1,偶数个就建立 0 例如: 1110 -> 1,110 -> 0,11011 -> 0 由于最后的 1 是没有后导 0 的就不计入新串 然后新串的 lcp 就可以对应到原串的对应位置,新串 lcp 匹配就等价于原串

CF #405 (Div. 2) B. Bear ad Friendship Condition (dfs+完全图)

题意:如果1认识2,2认识3,必须要求有:1认识3.如果满足上述条件,输出YES,否则输出NO. 思路:显然如果是一个完全图就输出YES,否则就输出NO,如果是无向完全图则一定有我们可以用dfs来书边和点 n个节点的有向完全图边数为e=n*(n-1) 代码: #include <bits/stdc++.h> #define maxn 150000 #define ll long long using namespace std; vector <int> k[maxn+5]; bo