• 躲藏


    链接:https://www.nowcoder.com/acm/contest/87/B

    XHRlyb和她的小伙伴Cwbc在玩捉迷藏游戏。
    Cwbc藏在多个不区分大小写的字符串中。
    好奇的XHRlyb想知道,在每个字符串中Cwbc作为子序列分别出现了多少次。
    由于Cwbc可能出现的次数过多,你只需要输出每个答案对2000120420010122取模后的结果。
    聪明的你在仔细阅读题目后,一定可以顺利的解决这个问题!

    输入描述:

    输入数据有多行,每行有一个字符串。

    输出描述:

    输出数据应有多行,每行表示一个答案取模后的结果。
    示例1

    输入

    Cwbc

    输出

    1

    说明

    Cwbc作为子序列仅出现了1次。
    示例2

    输入

    acdcecfwgwhwibjbkblcmcnco

    输出

    81

    说明

    Cwbc作为子序列出现了3
    4
    =81次。

    备注:

    每行字符串长度不超过2×10

    5

    ,字符串总长度不超过10

    6





    开两个数组,一个反向遍历,a[i]储存符合的bc,一个正向遍历b[i]储存符合的c 查找w结果就是pos+=(a[i]*b[i]);
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #include <vector>
    #include <queue>
    #include <stack>
    #include <cstdlib>
    #include <iomanip>
    #include <cmath>
    #include <cassert>
    #include <ctime>
    #include <map>
    #include <set>
    using namespace std;
    #pragma comment(linker, "/stck:1024000000,1024000000")
    #define lowbit(x) (x&(-x))
    #define max(x,y) (x>=y?x:y)
    #define min(x,y) (x<=y?x:y)
    #define MAX 100000000000000000
    #define MOD 1000000007
    #define pi acos(-1.0)
    #define ei exp(1)
    #define PI 3.1415926535897932384626433832
    #define ios() ios::sync_with_stdio(true)
    #define INF 0x3f3f3f3f
    #define mem(a) ((a,0,sizeof(a)))
    typedef long long ll;
    const ll mod=2000120420010122;
    char s[200006];
    ll a[200006],b[200006];
    int main()
    {
        while(~scanf("%s",s))
        {
            int k=strlen(s);
            ll  ans=0,pos=0;
            a[k]=0;
            for(int i=k-1;i>=0;i--)
            {
                if(s[i]=='c' || s[i]=='C') ans++;
                a[i]=a[i+1];
                if(s[i]=='b' || s[i]=='B')
                {
                    a[i]+=ans;
                    a[i]%mod;
                }
            }
            b[0]=(s[0]=='c' || s[0]=='C')?1:0;
            for(int i=1;i<k;i++)
            {
                b[i]=b[i-1];
                if(s[i]=='c' || s[i]=='C') b[i]++;
                if(s[i]=='w' || s[i]=='W')
                {
                    pos+=(1ll)*(b[i]*a[i])%mod;
                    pos%=mod;
                }
            }
            printf("%lld
    ",(1ll)*pos);
        }
        return 0;
    }
  • 相关阅读:
    HDU 4611 Balls Rearrangement 数学
    Educational Codeforces Round 11 D. Number of Parallelograms 暴力
    Knockout.Js官网学习(简介)
    Entity Framework 关系约束配置
    Entity Framework Fluent API
    Entity Framework DataAnnotations
    Entity Framework 系统约定配置
    Entity Framework 自动生成CodeFirst代码
    Entity Framework CodeFirst数据迁移
    Entity Framework CodeFirst尝试
  • 原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/9030090.html
Copyright © 2020-2023  润新知