疯狂QAQ
洛谷CF894A加强版
- 题目描述
给定一个长度为 n 的由大写字母组成的字符串,请计算该字符串有多少个子序列为 QAQ。 - 输入格式
一行,包含一个长度为 n 的字符串。 - 输出格式
一行,一个整数,表示答案。 - 样例输入
QAQAQYSYIOI - 样例输出
4 - 样例数据解释
QAQAQYSYIOI
QAQAQYSYIOI
QAQAQYSYIOI
QAQAQYSYIOI - 数据规模与约定
对于 30% 的数据,1 ≤ n ≤ 100
对于 60% 的数据,1 ≤ n ≤ 1000
对于 100% 的数据,1 ≤ n ≤ 2 × 10^5
洛谷上的题数据范围较小,所以三层循环分别枚举QAQ位置就可以O(n³)暴力AC
对于本题数据只能拿到60分
换一种思路
枚举中间A的位置,分别把左边Q的数量和右边Q的数量统计出来,这个统计可以在枚举A之前完成,输入时先记录Q总量,再用两个变量统计左右Q的数量,枚举A位置时越过一个Q就将右Q–,左Q++。包含这一个A的QAQ的数量就是左边Q的数量×右边Q的数量。最后把所有A的答案加起来,O(n)带走。
#include<iostream>
#