题目:当遇到ab时候变成bba,步数加一,最后输出步数
思路:所有的a到最后都是从左到右,而且a的数量不变
之后ab后边有b就一直加一,变换后b的数量也会加一
做法呢,就是从右边开始遍历,遇到a后就叫遇到的b乘以2
#include<bits/stdc++.h>
#define m 1000000007
char ch[1000002];
int main()
{
while(scanf("%s",ch)!=EOF)
{
long long cnt=0,ans=0;
int l=strlen(ch);
for(int i=l-1;i>=0;i--)
{
if(ch[i]=='b')
{
cnt++;
}
else if(ch[i]=='a')
{
ans=(ans+cnt)%m;
cnt=(cnt*2)%m;
}
}
printf("%lld\n",ans);
}
}
We have a string of letters 'a' and 'b'. We want to perform some operations on it. On each step we choose one of substrings "ab" in the string and replace it with the string "bba". If we have no "ab" as a substring, our job is done. Print the minimum number of steps we should perform to make our job done modulo 109 + 7.
The string "ab" appears as a substring if there is a letter 'b' right after the letter 'a' somewhere in the string.
Input
The first line contains the initial string consisting of letters 'a' and 'b' only with length from 1 to 106.
Output
Print the minimum number of steps modulo 109 + 7.
Examples
Input
ab
Output
1
Input
aab
Output
3
Note
The first example: "ab" → "bba".
The second example: "aab" → "abba" → "bbaba" → "bbbbaa".