USACO23OPEN-Silver C
题目来源
SPOJ:USACO23OPEN-Pareidolia(C)
题目背景
题面描述
bessie
相连的形式 (bessiebessiebessieb...
),返回 bessie
的最大数量。如
输入格式
输出格式
样例
输入数据 1
bessiebessie
输出数据 1
14
样例1解释
bessie
;
bessie
;
输入数据 2
abcdefghssijebessie
输出数据 2
28
数据规模与约定
- 测试点
:输入 的长度不超过 。 - 测试点
:输入 的长度不超过 。
题解(Solution)
bessie
。
bessie
,我们可以考虑设一个bessie
的前
bessie
就有
bessie
哪一位,设为
bessie
的贡献,一份是其他 bessie
的贡献。
bessie
不可以同时出现。
bessie
,因此 bessie
总数会增加
代码(Code)
#include<bits/stdc++.h>
#define For(i,l,r) for(int i=l;i<=r;i++)
#define Rof(i,l,r) for(int i=l;i>=r;i--)
using namespace std;
#define int long long
inline int input(){int x;return cin>>x,x;}
const int N = 301234;
char s[N];
int n,lst[N],f[N],ans;
signed main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
freopen("c.in","r",stdin);
freopen("c.out","w",stdout);
cin>>(s+1);
n=strlen(s+1);
for(int i=1;i<=n;i++){//bessie
if(s[i]=='b') lst[1]=i;
if(s[i]=='e') lst[6]=lst[5],lst[2]=lst[1];
if(s[i]=='s') lst[4]=lst[3],lst[3]=lst[2];
if(s[i]=='i') lst[5]=lst[4];
f[i]=f[lst[6]-1]+lst[6];
}For(i,1,n) ans+=f[i];
return cout<<ans<<'\n',0;
}