zoukankan      html  css  js  c++  java
  • 字符串中子序列出现次数(dp)

    躲藏

    链接:https://ac.nowcoder.com/acm/problem/15669
    来源:牛客网

    题目描述

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

    输入描述:

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

    输出描述:

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

    示例1

    输入

    Cwbc

    输出

    1

    说明

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

    示例2

    输入

    acdcecfwgwhwibjbkblcmcnco

    输出

    81

    说明

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

    备注:

    每行字符串长度不超过2×105,字符串总长度不超过106

    f[4] = (f[4] + (s[i] ==′ c′)∗f[3]) % Mod

     

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <iostream>
     4 #include <string>
     5 #include <math.h>
     6 #include <algorithm>
     7 #include <vector>
     8 #include <stack>
     9 #include <queue>
    10 #include <set>
    11 #include <map>
    12 #include <sstream>
    13 const int INF=0x3f3f3f3f;
    14 typedef long long LL;
    15 const int mod=1e9+7;
    16 const LL MOD=2000120420010122;
    17 const int maxn=1e5+10;
    18 using namespace std;
    19 
    20 string str1;
    21 string str2="cwbc";
    22 LL dp[10];
    23 
    24 int main()
    25 {
    26     
    27     while(cin>>str1)
    28     {
    29         memset(dp,0,sizeof(dp));
    30         for(int i=1;i<=str1.size();i++)
    31         {
    32             str1[i-1]=tolower(str1[i-1]);
    33             for(int j=str2.size();j>=1;j--)
    34             {
    35                 dp[j]=(dp[j]+(str1[i-1]==str2[j-1])*(j==1?1:dp[j-1]))%MOD;
    36             }
    37         }
    38         cout<<dp[str2.size()]<<endl;;
    39     }
    40     
    41     return 0;
    42 }

    一道类似题

    I love you

    链接:https://ac.nowcoder.com/acm/contest/3947/I
    来源:牛客网

    题目描述

    此时相望不相闻,愿逐月华流照君。
    一纸情书,到底蕴含了多少倍的爱情呢?
    I love you, not only for what you are, but for what I am when I am with you.

    输入描述:

    共一行:一封若干个字符的情书(大小写不敏感)。
    情书不会超过684594个字符(大写、小写字母)。

    输出描述:

    共一行:包含一个整数,即iloveyou在情书中作为子序列出现的次数。
    由于答案可能很大,请输出对20010905取模后的值。
     
    示例1

    输入

    IloveyouNotonlyforwhatyouareButforwhatIamWhenIamwithyouIloveyouNotonlyforwhatYouhavemadeofyourselfButforwhatYouaremakingofme

    输出

    2864
     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <iostream>
     4 #include <string>
     5 #include <math.h>
     6 #include <algorithm>
     7 #include <vector>
     8 #include <stack>
     9 #include <queue>
    10 #include <set>
    11 #include <map>
    12 #include <sstream>
    13 #include <ctime>
    14 const int INF=0x3f3f3f3f;
    15 typedef long long LL;
    16 const int mod=1e9+7;
    17 const LL MOD=20010905;
    18 const double PI = acos(-1);
    19 const double eps =1e-8;
    20 #define Bug cout<<"---------------------"<<endl
    21 const int maxn=1e5+10;
    22 using namespace std;
    23 
    24 string str1;
    25 string str2="iloveyou";
    26 LL dp[10];
    27 
    28 int main()
    29 {
    30     #ifdef DEBUG
    31     freopen("sample.txt","r",stdin);
    32     #endif
    33 //    ios_base::sync_with_stdio(false);
    34 //    cin.tie(NULL);
    35     
    36     while(cin>>str1)
    37     {
    38         memset(dp,0,sizeof(dp));
    39         for(int i=1;i<=str1.size();i++)
    40         {
    41 //            if(!((str1[i-1]>='A'&&str1[i-1]<='Z')||(str1[i-1]>='a'&&str1[i-1]<='z'))) continue;
    42             str1[i-1]=tolower(str1[i-1]);
    43             for(int j=str2.size();j>=1;j--)
    44             {
    45                 dp[j]=(dp[j]+(str1[i-1]==str2[j-1])*(j==1?1:dp[j-1]))%MOD;
    46             }
    47         }
    48         cout<<dp[str2.size()]<<endl;;
    49     }
    50     
    51     return 0;
    52 }

    队友写的:

     1 //MADE BY Y_is_sunshine;
     2 #include <algorithm>
     3 #include <iostream>
     4 #include <cstdlib>
     5 #include <cstring>
     6 #include <sstream>
     7 #include <cstdio>
     8 #include <vector>
     9 #include <string>
    10 #include <cmath>
    11 #include <queue>
    12 #include <stack>
    13 #include <map>
    14 #include <set>
    15  
    16 #define INF 0x3f3f3f3f
    17 #define MAXN 700005
    18  
    19 typedef long long ll;
    20  
    21 const ll mod = 20010905;
    22 const double PI = acos(-1);
    23  
    24 using namespace std;
    25  
    26 int N, M, K;
    27  
    28 ll dp[10][MAXN];
    29  
    30 int main(void)
    31 {
    32  
    33     string s;
    34     cin >> s;
    35     //transform(s.begin(), s.end(), s.begin(), tolower);
    36  
    37     s.insert(s.begin(), ' ');
    38     //cout << s << '
    ';
    39  
    40     string ss = " iloveyou";
    41  
    42     N = s.size();
    43     M = ss.size();
    44  
    45  
    46     for (int j = 0; j <= N; j++) {
    47         if (s[j] >= 'A' && s[j] <= 'Z')
    48             s[j] += 32;
    49         dp[0][j] = 1;
    50     }
    51     for (int i = 1; i <= M; i++) {
    52         for (int j = 1; j < N + 1; j++) {
    53             if (s[j - 1] == ss[i - 1]) {
    54                 dp[i][j] = dp[i][j - 1] + dp[i - 1][j - 1];
    55             }
    56             else {
    57                 dp[i][j] = dp[i][j - 1];
    58             }
    59             dp[i][j] %= mod;
    60         }
    61     }
    62  
    63     cout << dp[M][N] << '
    ';
    64 
    65     return 0;
    66 }

    -

  • 相关阅读:
    Leetcode NO.110 Balanced Binary Tree 平衡二叉树
    Leetcode NO.226 Invert Binary Tree 翻转二叉树
    Leetcode NO.215 Kth Largest Element In An Array 数组中的第K个最大元素
    根据特征的浏览器判断
    Cygwin在打开在当前目录
    【转帖】科学对待 健康养猫 打造快乐孕妇
    解决chrome浏览器安装扩展、应用程序一直处在“检查中”的问题
    对【SQL SERVER 分布式事务解决方案】的心得补充
    关于“点击这里继续访问您选择的百度XXX”
    VBA一例:如何保持文本框焦点
  • 原文地址:https://www.cnblogs.com/jiamian/p/12210899.html
Copyright © 2011-2022 走看看