1. 程式人生 > >洛谷 P2646 數數zzy

洛谷 P2646 數數zzy

-m 思路 iostream 輸出格式 include right 描述 sca ack

P2646 數數zzy

題目描述

zzy自從數學考試連續跪掉之後,上數學課就從來不認真聽了(事實上他以前也不認真聽)。於是他開始在草稿紙上寫寫畫畫,比如寫一串奇怪的字符串。然後他決定理♂性♂愉♂悅♂一下:統計這串字符串當中共有多少個為“zzy”的子序列(註意是子序列而非子串)。但是由於他寫的字符串實在是太長啦,而且他是個超級大蒟蒻,根本就數不過來。所以他決定請求你這個超級大神犇的幫助。你可以幫幫他嗎?

輸入輸出格式

輸入格式:

一行僅含小寫字母的字符串。

輸出格式:

一行,一個非負整數,表示輸入的字符串中為“zzy”的子序列的個數。

輸入輸出樣例

輸入樣例#1: 復制
zlzhy
輸出樣例#1: 復制
1

說明

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; }

洛谷 P2646 數數zzy