青藤oj #210733. 奶牛碑文
http://www.wikioi.cn/problem/210733
题目描述
小伟暑假期间到大草原旅游,在一块石头上发现了一些有趣的碑文。碑文似乎是一个神秘古老的语言,只包括三个大写字母 C 、O 和 W。尽管小伟看不懂,但是令他高兴的是,C 、O 、W 的顺序形式构成了一句他最喜欢的奶牛单词 “COW” 。现在,他想知道有多少次 COW 出现在文本中。如果 COW 内穿插了其他字符,只要 COW 字符出现在正确的顺序,小伟也不介意。甚至,他也不介意出现不同的 COW 共享一些字母。例如,CWOW 出现了1次 COW ,CCOW 算出现了2次 COW ,CCOOWW 算出现了8次 COW 。
输入格式
输入包括一行仅仅包括 “C”,“O”,“W” 的字符串
输出格式
输出 COW 作为输入字符串的子序列出现的次数(不一定是连续的)。提示:答案会很大,建议用 64 位整数(long long)。
思路
先储存‘C’的个数和‘W’个数,再找‘O’,然后把‘C’与‘W’个数相乘累加
代码
#include <bits/stdc++.h>
using namespace std;
char a[100005];
int b[100005] = { 0 }, c[100005] = { 0 };
int main() {
int n;
long long sum = 0, sumc = 0, sumw = 0;
cin >> a;
n = sizeof(a);
for (int i = 0; i < n; i++) {
if (a[i] == 'C') {
sumc++;
}
b[i] = sumc;
}
for (int i = n - 1; i >= 0; i--) {
if (a[i] == 'W') {
sumw++;
}
c[i] = sumw;
}
for (int i = 0; i < n; i++) {
if (a[i] == 'O')
sum += b[i] * c[i];
}
cout << sum;
return 0;
}
这篇博客介绍了青藤oj的一道编程题#210733,即奶牛碑文问题。博主探讨了如何解决寻找字符串中"COW"子序列出现次数的问题,提供了输入输出格式,解题思路以及代码实现,特别指出答案可能非常大,推荐使用64位整数类型来存储。

2457

被折叠的 条评论
为什么被折叠?



