当前位置 : 主页 > 编程语言 > java >

HDU 5904 BestCoder Round #88 Find Q (统计Q!)

来源:互联网 收集:自由互联 发布时间:2022-08-15
Find Q Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 262144/131072 K (Java/Others) Total Submission(s): 636Accepted Submission(s): 314 Problem Description Byteasar is addicted to the English letter 'q'. Now he comes across a string S


Find Q

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/131072 K (Java/Others)
Total Submission(s): 636    Accepted Submission(s): 314

Problem Description

Byteasar is addicted to the English letter 'q'. Now he comes across a string S consisting of lowercase English letters.

He wants to find all the continous substrings of S, which only contain the letter 'q'. But this string is really really long, so could you please write a program to help him?

Input

The first line of the input contains an integer T(1≤T≤10), denoting the number of test cases.
In each test case, there is a string S, it is guaranteed that S only contains lowercase letters and the length of S is no more than 100000.

Output

For each test case, print a line with an integer, denoting the number of continous substrings of S, which only contain the letter 'q'.

Sample Input

2
qoder
quailtyqqq

Sample Output

1
7

Source

​​BestCoder Round #88 ​​

Recommend

wange2014   |   We have carefully selected several similar problems for you:  ​​5932​​​ ​​5931​​​ ​​5930​​​ ​​5929​​​ ​​5928​​ 

题解:找出S的所有仅包含字母'q'的连续子串的数目。

就是cnt*(cnt+1)/2 累加呗...

AC代码:

#include<stdio.h>
#include<string.h>
const int N = 100000+20;
char S[N];
int main(){
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",S);
long long cnt=0,ans=0;
int L=strlen(S);
for(int i=0;i<=L;i++)
{
if(S[i]=='q')
{
cnt++;
}
else if(S[i]!='q'&&S[i-1]=='q')
{
ans+=cnt*(cnt+1)/2;
cnt=0;
}
}
printf("%lld\n",ans);
}
return 0;
}


网友评论