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

碑文的文字似乎来自一种神秘的古代语言,可看作一个只包含 COW(寒假每日一题 19)_算法 三种字符的字符串。

尽管贝茜无法解密该文字,但是她很欣赏 COW(寒假每日一题 19)_算法 按顺序构成她最喜欢的单词 COW(寒假每日一题 19)_#include_03

她想知道 COW(寒假每日一题 19)_#include_03 在碑文中一共出现了多少次。

她不介意 COW(寒假每日一题 19)_算法 之间是否存在其他字符,只要这三个字符按正确的顺序出现即可。

她也不介意多个不同的 COW(寒假每日一题 19)_#include_03 是否共享了一些字符。

例如,COW(寒假每日一题 19)_#include_03COW(寒假每日一题 19)_DP_08 中只出现一次,在 COW(寒假每日一题 19)_c++_09 中出现两次,在 COW(寒假每日一题 19)_算法_10 中出现八次。

给定碑文中的文字,请帮助贝茜计算 COW(寒假每日一题 19)_#include_03 出现的次数。

输入格式
第一行包含 COW(寒假每日一题 19)_递推_12

第二行包含一个长度为 COW(寒假每日一题 19)_递推_12 的字符串,其中只包含字符 COW(寒假每日一题 19)_算法

输出格式
输出给定字符串中 COW(寒假每日一题 19)_#include_03 作为子序列(不一定连续)的出现次数。

数据范围
COW(寒假每日一题 19)_递推_16

输入样例:

6
COOWWW

输出样例:

6


​解法一​

#include<iostream>

using namespace std;

typedef long long LL;

const int N = 100010;

int n;
char str[N];
int cnum[N], wnum[N];

int main(){

scanf("%d%s", &n, str);

for(int i = 0; i < n; i++) cnum[i] = cnum[i - 1] + (str[i] == 'C');

for(int i = n - 1; i >= 0; i--) wnum[i] = wnum[i + 1] + (str[i] == 'W');

LL res = 0;

for(int i = 0; i < n; i++){

if(str[i] == 'O') res += cnum[i] * wnum[i];
}

printf("%lld\n", res);

return 0;
}

​解法二​

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

typedef long long LL;

const int N = 100010;

int n;
char s[N];

int main(){
scanf("%d", &n);
scanf("%s", s);

LL a = 0, b = 0, c = 0;
for (int i = 0; i < n; i++)
if (s[i] == 'C') a ++ ;
else if (s[i] == 'O') b += a;
else c += b;

printf("%lld\n", c);
return 0;
}