《爱》 (罗伊·克里夫特创作诗歌)

参看小白月赛3的B题,只不过这里的字符串变长了一些,注意iloveyou作为子序列出现不一定是连续的。用f[i]表示iloveyou匹配了前i个的字符的子序列数,当遇到第i个字符,则之前匹配了前i-1个的字符的子序列都可以变为匹配了前i个的字符的子序列,即f[i]=f[i]+f[i-1]。

#include<cstdio>
using namespace std;
char c,str[8]= {'i','l','o','v','e','y','o','u'};
const int p=20010905;
int f[8];
int main() {
    f[0]=1;
    while(~scanf("%c",&c)) {//到读不到字符为止
        for (int i=0;i<8;i++)
         if (c==str[i] || c==str[i]-32)//小写或大写都行
          f[i+1]=(f[i+1]+f[i])%p;
    }
    printf("%d",f[8]);//iloveyou的数目
}