Codeforces Round #411 (Div. 2) D. Minimum number of steps

来源:互联网 发布:百度人工智能负责人 编辑:程序博客网 时间:2024/05/22 04:26

题目链接:Minimum number of steps


题目大意:给你一段字符串,只包含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;}

0 0
原创粉丝点击