NOIP普及组模拟赛1

疯狂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>
#

猜你喜欢

转载自blog.csdn.net/Wonderful_Answer/article/details/99561386