1
2
3

CodeForces 1084C

题目半天没看懂,太菜了呜呜呜呜

题意:让你构造一个字符串,全部为'a'字符,或者aba这样俩个a之间至少夹着一个b的字符

思路:先计算俩个b之间有多少个a,b[i]。

对于单独b——b区间,每个a你可以选任意选一个,即b[i]个,也可以一个都不选即b[i]++。

用乘法原理把所有的区间乘起来.

但注意到如果每个区间都不选‘a'字符的话,那么最后构造出来的是不合法的,也就是至少要有一个区间选'a'字符。

把乘起来的结果再减一就ok(别忘了取模,😢😢)

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define INF 0x7fffffffffffffff
typedef long long ll;
const double PI=3.1415926535897931;
const long long mod=1e9+7;
using namespace std;
//////////////////////////////////////////////
int b[1000000];
int main()
{
    string str;
    cin>>str;
    ll ans=1;
    int cnt=0;
    for(int i=0; i<str.size(); i++)
    {
        if(str[i]=='a')
            b[cnt]++;
        if(str[i]=='b'&&b[cnt])
        {
            cnt++;
        }
    }
    for(int i=0; i<=cnt; i++)
    {
        b[i]++;
        ans*=b[i]%mod;
        ans%=mod;
    }
    cout<<(ans-1)%mod<<endl;
    return 0;
}

 

posted @ 2020-04-11 18:35  Arance  阅读(150)  评论(0编辑  收藏  举报