洛谷 P2717 寒假作业
题目相关
题目链接: 洛谷 P2717 寒假作业
题目背景
zzs 和 zzy 正在被寒假作业折磨,然而他们有答案可以抄啊。
题目描述
他们共有 $n$ 项寒假作业。zzy 给每项寒假作业都定义了一个疲劳值 $a_i$,表示抄这个作业所要花的精力。
zzs 现在想要知道,有多少组连续的寒假作业的疲劳值的平均值不小于 $k$?
简单地说,给定一个长度为 $n$ 的正整数序列 ${a_i}$,求出有多少个连续子序列的平均值不小于 $k$。
输入格式
第一行是两个整数,分别表示序列长度 $n$ 和给定的参数 $k$。
第二行有 $n$ 个整数,第 $i$ 个整数表示序列的第 $i$ 个数字 $a_i$。
输出格式
输出一行一个整数表示答案。
样例 #1
样例输入 #1
1 | 3 2 |
样例输出 #1
1 | 4 |
提示
样例 1 解释
共有 $6$ 个连续的子序列,分别是 $(1)$、$(2)$、$(3)$、$(1,2)$、$(2,3)$、$(1,2,3)$,平均值分别为 $1$、$2$、$3$、$1.5$、$2.5$、$2$,其中平均值不小于 $2$ 的共有 $4$ 个。
数据规模与约定
- 对于 $20%$ 的数据,保证 $n \leq 100$。
- 对于 $50%$ 的数据,保证 $n \leq 5000$。
- 对于 $100%$ 的数据,保证 $1 \leq n \leq 10^5$,$1 \leq a_i,k \leq 10^4$。
题目解析
平均值不小于 $k$ 等涉及平均除法运算,处理起来比较麻烦,可以对原始数据减去 $k$ 进行处理。
设 $b_i=a_i-k$,那么问题转变为 $b_i$ 有多少连续子序列,其平均值大于等于 $0$,也即和大于等于 $0$。
对于区间和的问题,通常能想到前缀和。设 $s_j=\sum\limits_{i=1}^{j}a_i$,那么问题转变为有多少对 $(i,j),0\le i<j \le n$ 满足 $s_j-s_i\ge 0 \Rightarrow s_i\le s_j$。
可以看出这是一个正序对问题,思路与求解逆序对类似。需要注意相等的情况也要计算在内。
代码
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 lonlyn 的小站!