zoukankan      html  css  js  c++  java
  • Codeforces Round #411 div 2 D. Minimum number of steps

    D. Minimum number of steps

    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output
    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".
     
    解题思路:
    题意是输入一个字符串,将其中的ab改为bba,问需要变换多少次才能让字符串中没有ab
    由题可知,ab判断两种情况: 1.ab前面有a时的变化, 2.ab后面有b时的变化;
    具体解析放在代码中解释
     
    实现代码:
    #include<bits/stdc++.h>
    using namespace std;
    #define mod 1000000007
    char str[1000005];
    int main(){
        int n,total,a;
        scanf("%s",str);
            total = a = 0;
            int len = strlen(str);
            for(int i = 0;i < len;i++){
                if(str[i] == 'a'){   //由于只有a,b两个字母,只需判断是否为a
                    a = (2 * a + 1) % mod;  //由于数据太大,只能一步一步取模,若将b前面的a个数加起来用2^n-1公式求值,数字会由于太大,变成负数
                }else{
                    total = (total + a) % mod; //公式可自行推演,多推一下,很容易得出
                }
            }
            printf("%d
    ",total);
        return 0;
    }
  • 相关阅读:
    七种常用的特征工程
    Linux发邮件
    git提交的问题
    怎么在工作中快速学习,获得晋升?——吴军得到直播实录
    曾李青总结的创业的观点
    python解析json数据
    【基础算法整理】
    【剑指offer】连续子数组的最大和
    【剑指offer】最小的K个数
    【剑指offer】数组中出现次数超过一半的数字
  • 原文地址:https://www.cnblogs.com/kls123/p/6814655.html
Copyright © 2011-2022 走看看