阿短到大草原旅游,在石头上发现了一些有趣的碑文。碑文似乎是一个古老的语言,只包括三个大写字母C、О和W。尽管阿短看不懂,但是令他高兴的是,C、O、W的顺序形式构成了他最喜欢的单词cow,他想知道出现了多少次COW。
如果COW内穿插了其他字符,只要COW字符出现在正确的顺序,阿短也不介意,也不介意不同的COW共享一些字母。例如,CWOW出现了1次COW,CCOW算出现了2次COW,CCOOWW算出现了8次COW。
输入
第1行是一个整数N,代码碑文的长度。
第2行是N个字符的字符串,每个字符是一个C、O或W,不会是其他字符。
输出
输出COW作为输入字符串的字串出现的次数(不一定是连续的)。
输入样例 1
6 COOWWW
输出样例 1
6
提示
对于10%的数据:N≤10000
对于60%的数据:N≤60000
对于80%的数据:N≤100000
对于100%的数据:N≤200000
答案会很大,建议用64位整数(long long)
需要用更加高效的代码才能不超时!
代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n, s[200000]={0}, count_c = 0, count_w = 0;
char str[200001]={0};
long long sum = 0;
cin >> n >> str;
for (int i = 0; i < n - 1; i++){ //统计"C"的数量,并存入数组
switch(str[i]){
case 'C': ++count_c; break;
case 'O': s[i] = count_c;
}
}
for (int i = n - 1; i >= 0; i--){ //统计"W"的数量,并在乘积后累加给sum
switch(str[i]){
case 'W': ++count_w; break;
case 'O': sum += count_w * s[i];
}
}
cout << sum;
return 0;
}