算法题:cow

简介: **题目:奶牛贝茜在她最喜欢的牧场中发现了一块石碑,上面刻有神秘的碑文。碑文的文字似乎来自一种神秘的古代语言,可看作一个只包含 C,O,W 三种字符的字符串。尽管贝茜无法解密该文字,但是她很欣赏 C,O,W 按顺序构成她最喜欢的单词 COW。

**题目:

奶牛贝茜在她最喜欢的牧场中发现了一块石碑,上面刻有神秘的碑文。

碑文的文字似乎来自一种神秘的古代语言,可看作一个只包含 C,O,W 三种字符的字符串。

尽管贝茜无法解密该文字,但是她很欣赏 C,O,W 按顺序构成她最喜欢的单词 COW。

她想知道 COW 在碑文中一共出现了多少次。

她不介意 C,O,W 之间是否存在其他字符,只要这三个字符按正确的顺序出现即可。

她也不介意多个不同的 COW 是否共享了一些字符。

例如,COW 在 CWOW 中只出现一次,在 CCOW 中出现两次,在 CCOOWW 中出现八次。

给定碑文中的文字,请帮助贝茜计算 COW 出现的次数。

输入格式:

第一行包含 N。

第二行包含一个长度为 N 的字符串,其中只包含字符 C,O,W。

输出格式:

输出给定字符串中 COW 作为子序列(不一定连续)的出现次数。

数据范围:

1≤N≤105

输入样例:

6

COOWWW

输出样例:

6

分析:记忆化搜索

输入字符串

从前往后遍历

如果遍历到‘O’,它只会与前面的‘C’组成”CO“,所以不需要管后面的‘C’的数量

同理如果遍历到‘W’,它只会与前面的‘CO’组成”COW“,所以不需要管后面的‘CO’的数量

记录当前‘C’,“CO”,“COW”的个数**

源码:

include <bits/stdc++.h>

using namespace std;

int main()

{

int n;
long long a=0,b=0,c=0;
string s;
cin >> n>> s;
for(auto d:s)
{
if(d=='C')
    {
        a++;
    }else if(d=='O')
    {
        b+=a;
    }else
    {
        c+=b;
    }
}
cout << c<<endl;
return 0;

}

这道题本身不难,但是真的很难想!

目录
打赏
0
0
0
0
18
分享
相关文章
BTRFS - A Forest,extent分配树,同步与并发
介绍Btrfs如何由树木森林构成。
136 3
使用部分写时复制提升Lakehouse的 ACID Upserts性能
使用部分写时复制提升Lakehouse的 ACID Upserts性能
50 1
|
11月前
|
BTRFS - COW B-trees
介绍btrfs的COW特性。
118 1
常用拷贝和替换算法-copy讲解
常用拷贝和替换算法-copy讲解
126 1
简单聊聊copy on write(写时复制)技术
简单聊聊copy on write(写时复制)技术
文件lseek操作产生空洞文件的方法
文件lseek操作产生空洞文件的方法
155 0
phpCOW机制(写时复制)
phpCOW机制(写时复制)
113 0
phpCOW机制(写时复制)
目录
目录