题目链接:http://codeforces.com/contest/805/problem/D 题意:给你一个字符串,你要对他进行操作,直至不能操作为止,操作的结果是,遇到ab字符串就把他变成bba,问你最少需要多少
题目链接:http://codeforces.com/contest/805/problem/D
题意:给你一个字符串,你要对他进行操作,直至不能操作为止,操作的结果是,遇到ab字符串就把他变成bba,问你最少需要多少次操作
解析:其实变几个你大概就能发现规律了,ab->bba,abb->bbab->bbbba,你会发现a后面跟着几个b,那就需要变几次,而且变过以后,b的个数会翻一倍,并且放到了a的前面,所以会对前面有影响,于是你从后往前面看就好了
#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
int main(void)
{
string a;
cin>>a;
int len = a.length();
int cnt = 0,ans = 0;
for(int i=len-1;i>=0;i--)
{
if(a[i]=='a')
{
ans = (ans+cnt)%mod;
cnt = (cnt*2)%mod;
}
else
cnt++;
}
printf("%d\n",ans);
return 0;
}