题目描述 蒟蒻的辞树又被吊打了嘤嘤嘤。留下了属于弱者的眼泪QAQAQAQAQAAQAAQA······ 现在我 们定义辞树的悲伤值 F 。F的值为主串中子序列为”QAQ”的个数。注意字母“QAQ”不一定是 连续的,但是字母的顺序应该是准确的。
输入 输入一个整数T(0 ≤ T ≤ 20),代表有T组数据。每组数据会给出一个字符串S,长度为len,0 < len ≤ 1000000
输出
根据每组的字符串,输出辞树的悲伤值F,每组数据换行。
输入样例
2 QAQAQYSYIOIWIN QAQQ
输出样例
4 2
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
string str, ss;
long long sum;
int main()
{
int t;
scanf ("%d", &t);
while (t--)
{
cin >> str;
int len = str.size();
int ans_Q = 0, ans_A = 0; // 用来记录A,Q的数量
for (int i = 0; i < len; i++)
{
if (str[i] == 'Q' || str[i] == 'A')
{
ss += str[i];
if (str[i] == 'A')
ans_A ++;
else ans_Q ++;
}
}
int appear_A = 0;
sum = 0;
for (int i = 0; ans_A > 0; i++)
{
if (ss[i] == 'A')
{
sum += (i - appear_A) * (ans_Q - (i-appear_A));
//当前所有字母的数目-出现A的数目就是当前A左边的数目
//所有Q的数目-左边的数目就是右边Q的数目
appear_A ++;
ans_A --;
}
}
printf ("%lld\n", sum);
}
return 0;
}