CodeForces - 804B  Minimum number of steps(思维)

Minimum number of steps

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".

 

题意:给你一个只包含 a, b 的字符串, 要求将其中的 "ab", 都变成 "bba",问一直到最后没 "ab"子串,需要变化多少次。

思路:思维题就是思维题,只要发现那一点,代码真的很好写,可是就是发现不了啊。。。QAQ  很显然,这个题时间就给了1000ms, 而且字符串的长度还是 1e6,肯定不可能用模拟来做。所以就开始找规律,这个题只要发现两点,就很容易 A 了,首先,对于每个 "ab",变化后,b 的数量是翻倍的,接着就是,对于每个字符 a  后面后多少个 b ,就需要变化多少次。。最后加起来就是答案了。 我不捞谁捞.jpg..

AC代码:

#include<bits/stdc++.h>
using namespace std;

const int mod = 1e9 + 7;
int main()
{
    string s;
    while(cin >> s){
        long long b = 0;   ///记录一下 a 后面b 的数量
        long long sum = 0;
        for(int i = s.size() - 1;i >= 0;i --){
            if(s[i] == 'a'){
                sum = (sum % mod + b % mod) % mod;
                b = (b % mod * 2) % mod;
            }
            else if(s[i] == 'b'){
                b ++;
            }
        }
        printf("%I64d\n",sum);
    }
    return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值