题目链接:http://codeforces.com/contest/1084/problem/C
题意不太好理解,就是给了一个只含有小写字母的字符串,然后要从中挑选子序列,所挑选的子序列满足下面的两种情况,才算符合要求,一是所挑选的字母都是'a',另一种是对于所挑选的两个'a',在原字符串中间需要有任意个'b',问这样的子序列有多少种。
解法就是每段a的情况相乘,对于一段长度为sum的'a'我们有sum+1种操作,因为可以不挑选这一段的'a',在最后-1就是排除掉所有的'a'都不挑选的情况。
AC代码:
#include<bits/stdc++.h>
#define ll long long
const int mod = 1e9 + 7;
using namespace std;
int main()
{
string str;
ll ans = 0;
cin>>str;
str += 'b';
int len = str.length();
ans = 1;
ll num1 = 1;
for(int i = 0; i < len; i++){
if(str[i] == 'a') num1++;
else if(str[i] == 'b'){
ans = ans * num1 % mod;
num1 = 1;
}
}
ans -= 1;
cout << ans << endl;
}