zoukankan      html  css  js  c++  java
  • CodeForces

    题目大意:把一个串里的ab改为bba,求最少改几次就没有ab了

    具体思路:可以把一次操作看成把a放到b右边,再增加一个b,要求把所有的a都移到b右边

    发现1个a过一个b要1次操作

    2个a过一个b要1+2次操作

    3个a过一个b要1+2+4次操作

    那么搞个前缀和优化就可以算答案啦

    AC代码

    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    int sum[2000000],po[2000000],n,i,j,tot,ans;
    const int ha=1e9+7;
    char s[2000000];
    main()
    {
        scanf("%s",s);
        n=strlen(s);
        po[0]=1;
        for(i=1;i<=1000000;i++)po[i]=po[i-1]*2%ha;
        for(i=0;i<=1000000;i++)sum[i]=(sum[i-1]+po[i])%ha;
        for(i=0;i<n;i++)
        {
            if(s[i]=='a')tot++;
            else ans=(ans+sum[tot-1])%ha;
        }
        printf("%lld",ans);
        return 0;
    }
  • 相关阅读:
    pycharm的集成vim
    几款在线脑图制作工具
    编辑器vim简介
    常用服务器ftp、ssh
    56. Merge Intervals
    58. Length of Last Word
    55. Jump Game
    53. Maximum Subarray
    52. N-Queens II
    51. N-Queens
  • 原文地址:https://www.cnblogs.com/Orange-User/p/8428424.html
Copyright © 2011-2022 走看看