题目大意:
给你一个由小写字母组成的字符串 s ,让你找一种序列:
1、对于任意一个 i ,使得 s[ p[ i ] ] == ‘a’
2、对于任意一个 i ,存在 p[ i ] < j < p[i + 1],且s[ p[ i ] ] == ‘b’
求这种序列有多少个,答案 mod 1e9
解法一: 数学 + 思维
思路:把字符串换成这样aabaaabaabaa(有多个b就把它缩为一个),相当于有若干个b把a分成了若干块,这样转变成数学问题,对于每个块的大小ai,我都有ai+1种选法,答案乘以ai+1即可,算完之后ans-1就是真正的答案,为什么要减一,因为每块都可以不选,那么有一种非法情况是所有块都不选,所以要减一。
注意细节
#include<bits/stdc++.h>
using namespace std;
//string s[210];
//bool vis[110];
typedef long long ll;
const int maxn = 3e6 + 5;
const int mod = 1e9 + 7;
char s[maxn];
int main(){
cin >> s ;
int n = strlen(s);
ll ans = 1,res = 1;
for(int i = 0 ; i < n ; i++){
if(s[i]