题目大意:给你一段字符串,只包含a,b两种字符,如果碰到ab,就将它变为bba,问这样的变换需要几次
题目思路:我的做法比较不清真,但是能AC。统计每个b左边的a有多少个,然后就是从2的0次方加到2的n-1次方,每个b的贡献是这么多,把所有b的贡献累加,就可以了,算贡献的时候预处理一下2的多少次方,然后预处理一下从2的0次方加到2的n-1次方的总和是多少,每次都对1e9+7取模就好了
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
string a;
const ll MOD = 1e9+7;
int cal[1000005],ss[1000005];
int main(){
ios::sync_with_stdio(false);
cal[0] = 1;
for(int i = 1;i < 1000005;i++)
cal[i] = (cal[i-1]*2)%MOD;
ss[0] = 1;
for(int i = 1;i < 1000005;i++)
ss[i] = (ss[i-1]+cal[i])%MOD;
cin>>a;
ll l = a.size();
ll ans = -1;
ll sum = 0;
for(ll i = 0;i < l;i++){
if(a[i] == 'a') ans++;
if(a[i] == 'b'&&ans >= 0) sum = (sum+ss[ans])%MOD;
}
printf("%lld\n",sum);
return 0;
}