Find Q
Accepts: 392
Submissions: 780
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 262144/131072 K (Java/Others)
问题描述
Byteasar迷恋上了'q'这个字母。 在他眼前有一个小写字母组成的字符串SSS,他想找出SSS的所有仅包含字母'q'的连续子串。但是这个字符串实在是太长了,你能写个程序帮助他吗?
输入描述
输入的第一行包含一个正整数T(1≤T≤10)T(1\leq T\leq10)T(1≤T≤10),表示测试数据的组数。 对于每组数据,包含一行一个小写字母组成字符串SSS,保证SSS的长度不超过100000100000100000。
输出描述
对于每组数据,输出一行一个整数,即仅包含字母'q'的连续子串的个数。
输入样例
2 qoder quailtyqqq
输出样例
1 7
思路;
1、直接模拟即可,注意数据范围要用long long。
Ac代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
#define ll __int64
char a[100300];
ll ans[100300];
int main()
{
ll t;
scanf("%I64d",&t);
while(t--)
{
scanf("%s",a);
ll cont=0;
ll contz=0;
ll n=strlen(a);
for(ll i=0;i<n;i++)
{
if(a[i]=='q')
{
ll flag=0;
for(ll j=i;j<n;j++)
{
if(a[j]=='q')cont++;
else
{
flag=1;
i=j;break;
}
}
if(flag==0)break;
ans[contz++]=cont;
cont=0;
}
}
if(cont!=0)
{
ans[contz++]=cont;
}
ll output=0;
for(ll i=0;i<contz;i++)
{
output+=(ll)((ans[i]+1)*ans[i]/2);
}
printf("%I64d\n",output);
}
}