题目描述
给你一个字符串,请问其有多少个子序列(可以非连续)为 erewrwerwer erewrwerwer erewrwerwer 。
输入格式
一行一个字符串,由小写字母’e’、’w’或者’r’组成。
输出格式
一行一个整数,表示子序列为 erewrwerwer erewrwerwer erewrwerwer 的个数,模 109+7 10^9+7 109+7 。
样例
样例输入
erewrwerwererewrwerwer
样例输出
260
数据范围与提示
设 n n n 为字符串长度
对于前 20% 20 % 20% 的数据, n≤11 n \le 11 n≤11
对于另外 30% 30 % 30% 的数据, n≤20 n \le 20 n≤20
对于 100% 100 % 100% 的数据, n≤105 n \le 10^5 n≤105
来源
东师附中集训
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const long long mod=1000000007;
long long cnt[12];
string a;
int main()
{
cin>>a;
for(int i=0;i<a.size();i++){
char b=a[i];
if(b=='e'){
cnt[1]=(cnt[1]+1)%mod;
cnt[3]=(cnt[3]+cnt[2])%mod;
cnt[7]=(cnt[7]+cnt[6])%mod;
cnt[10]=(cnt[10]+cnt[9])%mod;
}
if(b=='w'){
cnt[4]=(cnt[4]+cnt[3])%mod;
cnt[6]=(cnt[6]+cnt[5])%mod;
cnt[9]=(cnt[9]+cnt[8])%mod;
}
if(b=='r'){
cnt[2]=(cnt[2]+cnt[1])%mod;
cnt[5]=(cnt[5]+cnt[4])%mod;
cnt[8]=(cnt[8]+cnt[7])%mod;
cnt[11]=(cnt[11]+cnt[10])%mod;
}
}
cout<<(cnt[11])%mod<<endl;
return 0;
}