zoukankan      html  css  js  c++  java
  • 躲藏

    链接: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;
    }
  • 相关阅读:
    三维体系、点、矢量
    在服务中创建用户进程的方法(C#版)
    C++批判(2)
    MFC五大批判
    Windows服务编写原理及探讨(一)
    Lua常用资源连接
    网友怒批“Linux难敌视窗新七大理由”之我见
    在VC++中实现同步Internet时间
    Lua脚本语法说明(修订)
    Lua 5.0 参考手册
  • 原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/9030090.html
Copyright © 2011-2022 走看看