• 字符串中子序列出现次数【模板题】


    形如:题意:给一个字符串,求子序列“xyz...x”出现的次数

    两道板子题:https://ac.nowcoder.com/acm/contest/3947/I

     https://ac.nowcoder.com/acm/contest/87/B【注意:是否区分大小写】

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 #define int long long
     5 #define mod 20010905 
     6 int dp[66];
     7 signed main(){
     8     string s;
     9     cin>>s;
    10     
    11     for(int i=0;i<s.size();i++){
    12         s[i]=tolower(s[i]);
    13         dp[8]=(dp[8]+(s[i]=='u')*dp[7])%mod;
    14         dp[7]=(dp[7]+(s[i]=='o')*dp[6])%mod;
    15         dp[6]=(dp[6]+(s[i]=='y')*dp[5])%mod;
    16         dp[5]=(dp[5]+(s[i]=='e')*dp[4])%mod;
    17         dp[4]=(dp[4]+(s[i]=='v')*dp[3])%mod;
    18         dp[3]=(dp[3]+(s[i]=='o')*dp[2])%mod;
    19         dp[2]=(dp[2]+(s[i]=='l')*dp[1])%mod;
    20         dp[1]=(dp[1]+(s[i]=='i'))%mod;
    21     }
    22     cout<<dp[8];
    23     return 0;
    24 }

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int inf=1<<30;
     4 typedef long long ll;
     5 const double pi=acos(-1);
     6 const int mod=2000120420010122;
     7 const int maxn=2e5+7;
     8 ll dp[5];
     9 int main(){
    10     string s;
    11     while(cin>>s){
    12     memset(dp,0,sizeof(dp));
    13     for(int i=0;i<s.length();i++){
    14         s[i]=tolower(s[i]);            
    15             dp[4]=(dp[4]+(s[i]=='c')*dp[3])%mod;
    16             dp[3]=(dp[3]+(s[i]=='b')*dp[2])%mod;
    17             dp[2]=(dp[2]+(s[i]=='w')*dp[1])%mod;
    18             dp[1]=(dp[1]+(s[i]=='c'))%mod;            
    19     }
    20     cout<<dp[4]<<endl;
    21     }
    22     return 0;
    23 }
  • 相关阅读:
    月亮,还是馅饼(2)
    月亮,还是馅饼(1)
    spread 论坛
    kaok website
    提升 .NET 程序性能的 一些 原则
    sql convert
    sql 中 MSDTC 不可用。
    判断sql执行所花的时间(精度为毫秒)
    35岁以前成功的12条黄金法则
    快速删除表中的数据
  • 原文地址:https://www.cnblogs.com/pengge666/p/12210472.html
Copyright © 2020-2023  润新知