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;
    }
  • 相关阅读:
    配置步骤
    swap区
    Oracle的left join中on和where的区别
    drop与truncate
    关于trace
    oracle执行计划连接方式
    oracle系统结构
    查询存档
    oracle统计信息
    分区索引
  • 原文地址:https://www.cnblogs.com/Orange-User/p/8428424.html
Copyright © 2011-2022 走看看