zoukankan      html  css  js  c++  java
  • B: Ocean的游戏(前缀和)

    B: Ocean的游戏
    Time Limit: 1 s      Memory Limit: 128 MB
    Submit My Status
    Problem Description
    给定一个字符串s,保证只包含小写的’o’,’c’,’e’,’a’,’n’。是否存在这样的偏序对<a,b,I,j,k>使得a<b<i<j<k 并且s[a]+s[b]+s[i]+s[j]+s[k]=”ocean”,请输出偏序对的个数。

    Input
    第一行输入一个整数n(1≤n≤105)n(1≤n≤105);

    第二行输入一个长度为nn的字符串ss。

    Output
    输出一个整数(这个数可能十分大,对109+7109+7取模)

    Sample Input
    15
    oooccceeeaaannn
    Sample Output
    243

    #include<iostream>
    #include<string.h>
    #include<algorithm>
    #define inf 1000000007
    #define ll long long
    using namespace std;
    ll nn,num[111111][5];
    char s[111111],p[5]={'o','c','e','a','n'};
    int main()
    {
        scanf("%lld",&nn);
        cin>>s;
        ll o=0,oc=0;
        for(int j=0;j<nn;j++)
        {
            if(s[j]==p[0])//出现o
                o++;
            num[j][0]=o;//记录o的个数
            if(s[j]==p[1])//出现c,找oc个数
                oc+=num[j][0]%inf;//oc个数=前面oc个数+前面o的个数
            num[j][1]=oc%inf;//cout<<num[j][1];
        }
        ll n=0,an=0;
        for(int j=nn-1;j>=0;j--)
        {
            if(s[j]==p[4])
                n++;
            num[j][4]=n;//cout<<c;
            if(s[j]==p[3])
                an+=num[j][4]%inf;
            num[j][3]=an%inf;//cout<<num[j][3];
        }
        ll sum=0;
        for(int i=0;i<nn;i++)
        {
            if(s[i]=='e')
                sum+=(num[i][1]*num[i][3])%inf;
        }
        printf("%lld
    ",sum%inf);
        return 0;
    }
    
  • 相关阅读:
    Java Stax操作XML简介
    使用JAXB来实现Java合xml之间的转换
    WebService学习笔记系列(四)
    JavaWeb学习笔记总结 目录篇
    成为谷歌的java程序员首先要做到这五点!
    Java实现快速排序
    二叉树遍历(Java实现)
    Java单链表反转
    学好java,做好工程师必读的15本书
    最全前端资源汇集
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/9502690.html
Copyright © 2011-2022 走看看