题目描述
zzy自从数学考试连续跪掉之后,上数学课就从来不认真听了(事实上他以前也不认真听)。于是他开始在草稿纸上写写画画,比如写一串奇怪的字符串。然后他决定理♂性♂愉♂悦♂一下:统计这串字符串当中共有多少个为“zzy”的子序列(注意是子序列而非子串)。但是由于他写的字符串实在是太长啦,而且他是个超级大蒟蒻,根本就数不过来。所以他决定请求你这个超级大神犇的帮助。你可以帮帮他吗?
输入输出格式
输入格式:
一行仅含小写字母的字符串。
输出格式:
一行,一个非负整数,表示输入的字符串中为“zzy”的子序列的个数。
输入输出样例
说明
70%的数据满足:1<=n<=100。
100%的数据满足:1<=n<=1000000。
n表示字符串的长度
数据保证答案不超过2^63-1
思路:数学
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; char s[1000010]; long long sum[1000010]; long long ans,len,num; int main(){ scanf("%s",s); len=strlen(s); for(int i=1;i<=1000000;i++) sum[i]=sum[i-1]+i; for(int i=0;i<len;i++){ if(s[i]==‘z‘) num++; if(s[i]==‘y‘) ans+=sum[num-1]; } cout<<ans; }