题目描述
蒟蒻的辞树又被吊打了嘤嘤嘤。留下了属于弱者的眼泪QAQAQAQAQAAQAAQA······ 现在我
们定义辞树的悲伤值 F 。F的值为主串中子序列为”QAQ”的个数。注意字母“QAQ”不一定是
连续的,但是字母的顺序应该是准确的。
输入
输入一个整数T(0 ≤ T ≤ 20),代表有T组数据。每组数据会给出一个字符串S,长度为len,0 <
len ≤ 1000000
输出
根据每组的字符串,输出辞树的悲伤值F,每组数据换行。
输入样例
2
QAQAQYSYIOIWIN
QAQQ
输出样例
4
2
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
using namespace std;
int main()
{
int n;
scanf("%d\n",&n); //记得添加一个换行吸收回车符
while(n--)
{
char s1[(int)1e6],s[(int)1e6];
gets(s1);
int i,j=0,a=0,q=0;
for(i=0;i<strlen(s1);i++) //将s1预处理为只含QA的字符串,并记录QA的个数
{
if(s1[i]=='A')
{
s[j++]=s1[i];
a++;
}
else if(s1[i]=='Q')
{
s[j++]=s1[i];
q++;
}
}
//puts(s);
int k=a,sum=0;
//printf("%d\n",k);
for(i=0;k>0;i++) //以a出现的次数为循环条件,出现a次则循环结束
{
if(s[i]=='A')
{
sum+=(i-(a-k))*(q-i+(a-k)); //i-(a-k)代表下标为i处的a前边有几个q
k--; //q-i+(a-k)代表下标为i处的a后边有几个q
}
}
printf("%d\n",sum);
}
return 0;
}