https://codeforces.com/problemset/problem/1084/C
C. The Fair Nut and String
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
The Fair Nut found a string ss. The string consists of lowercase Latin letters. The Nut is a curious guy, so he wants to find the number of strictly increasing sequences p1,p2,…,pkp1,p2,…,pk, such that:
The Nut is upset because he doesn't know how to find the number. Help him.
This number should be calculated modulo 109+7109+7.
Input
The first line contains the string ss (1≤|s|≤1051≤|s|≤105) consisting of lowercase Latin letters.
Output
In a single line print the answer to the problem — the number of such sequences p1,p2,…,pkp1,p2,…,pk modulo 109+7109+7.
Examples
input
Copy
abbaa
output
Copy
5
input
Copy
baaaa
output
Copy
4
input
Copy
agaa
output
Copy
3
Note
In the first example, there are 55 possible sequences. [1][1], [4][4], [5][5], [1,4][1,4], [1,5][1,5].
In the second example, there are 44 possible sequences. [2][2], [3][3], [4][4], [5][5].
In the third example, there are 33 possible sequences. [1][1], [3][3], [4][4].
题意:两个‘a’之间有‘b’ 或 单独一个‘a’ 有多少种情况
题解:先在最后加上一个‘b’,把连续有多少个a计数成一个数组a,最后for i:a, ans = ans * (a[i]+1) % mod
#include
#define INF 0x3f3f3f3f
#define mem(a, x) memset(a, x, sizeof(a))
#define X first
#define Y second
#define rep(i,a,n) for (int i=a;i=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
using namespace std;
typedef vector vi;
typedef long long ll;
typedef pair pii;
const double PI = acos(-1.0);
const ll mod=1000000007;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
//------------------------------------head------------------------------------
const int N = 1e5+10;
string s;
int a[N];
int main() {
int n = SZ(s);
cin >> s;
s += 'b';
int cnt = 0, tmp = 0;
for (char c: s) {
if (c == 'a') tmp++;
else if (c == 'b') {
a[cnt++] = tmp;
tmp = 0;
}
}
ll ans = 1;
rep (i, 0, cnt) {
ans = ans * (a[i]+1) % mod;
}
cout << ans - 1 << endl;
}