Find Q
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/131072 K (Java/Others)Total Submission(s): 374 Accepted Submission(s): 204
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?
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 .
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
Recommend
太坑了,在BC赛中输出没用%I64d 刚开始过了,后来却被hack。太亏了,掉了一大波分,下次就长记性了,要学会算时间复杂度。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
char s[110000];
int t,i,j,k;
__int64 l,r,m,n;
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
int len=strlen(s);
l=0;
r=0;
__int64 sum=0;
for(i=0;i<len;i++)
{
if(s[i]=='q')
{
r++;
}
else
{
sum+=(r-l)*(1+r-l)/2;
l=i;
r=i;
}
}
sum+=(r-l)*(1+r-l)/2;
printf("%I64d\n",sum);
}
return 0;
}