Codeforces 1084C The Fair Nut and Stringi

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:

  1. For each ii (1≤i≤k1≤i≤k), spi=spi= 'a'.
  2. For each ii (1≤i

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;
}

 

你可能感兴趣的:(codeforces,题解)