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

xiaoxiao2021-02-28  110

题意:给你一个只含若干个 a 和 b 的字符串,你进行一个操作(把字符串ab变成bba),让你求把所给字符串变成不含 子串ab 的字符串的最小次数。 思路:从后往前遍历,从遇到第一个b开始记录b出现的次数ans,当出现a后,通过变换把a移到第一个b后面需要ans次操作,同时b的个数*2,即ans*=2,一直遍历到头即可,注意,sum和ans都要mod1e9+7; #include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() {     char str[1000010];     gets(str);     int k = strlen(str);     long long ans = 0;     int gg = 0;     long long sum = 0;     for(int i = k-1;i>=0;i--)     {         if(str[i]=='b')             gg = 1;         if(gg==0&&str[i]=='a')             continue;         if(str[i]=='b')             ans++;         else if(str[i]=='a')         {             sum += ans;             ans*=2;             ans %= 1000000007;             sum %= 1000000007;         }     }     printf("%lld",sum);     return 0; }
转载请注明原文地址: https://www.6miu.com/read-43164.html

最新回复(0)