比赛 20150420 评测结果 AAWWAAWAAW
题目名称 最终得分 60
用户昵称 STARGAZER 运行时间 0.021 s
代码语言 C++ 内存使用 0.31 MiB
提交时间 2015-04-20 09:31:08
显示代码纯文本
/*
1940. 牛
★   输入文件:cowa.in   输出文件:cowa.out   简单对比
时间限制:1 s   内存限制:256 MB
【题目描述】
贝茜奶牛偶然发现一个有趣的铭文刻在她最喜欢的放牧场中间的一块大石头。
碑文的文字似乎是从一个只有三个字符的字母C,O,和W的神秘古代语言.
虽然贝茜不能破译这段文字,但是她喜欢这样一个的事实,C,O,
和W序列形成了她最喜欢的一个单词,她想知道'cow'在文本中出现了多少次。
贝茜不介意有其他字母穿插在COW之间,只要字母按正确的顺序出现。
她也不介意不同的COW分享一些字母。例如,COW出现在CWOW一次,
出现在CCOW两次,出现在CCOOWW八次。
给出石刻文本,请帮贝西计算COW出现了多少次。
【输入格式】
输入的第一行包含一个整数n≤10^5。
第二行包含n个字符的字符串,其中每个字符是C,O,或W
【输出格式】
输出COW的出现次数(COW作为一个子序列,不一定在输入的字符串中是连续的)。
请注意,答案可以是非常大的,所以一定要使用64位的整数
(在C + +中是"long long",在Java中是"long")做你的计算。
【样例输入】
6
COOWWW
【样例输出】
6
*/
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
string a;
int n,i=0,j;
long long num=0,c=1,p=0;
int main(){
	freopen("cowa.in","r",stdin);
	freopen("cowa.out","w",stdout);
	cin>>n>>a;
	while(a[i]!='C')
		i++;
	i++;
	for(;i<a.size();i++)
	{
		switch(a[i])
		{
		    case 'C': c++;break;
		    case 'O': p+=c;break;
		    case 'W': 
			{
				j=0;
				while(a[i]=='W')
					i++,j++;
				i--;
				num*=j,num+=p*j,p=0;
			}
		}
	}
	cout<<num<<endl;
	return 0;
}