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; }