这道题的正解是 树状数组,但是我们用朴素解法 枚举所有子数组 也能在考试时拿到一定的分数。
题意:给定长度为 n 的数组 papers,以及闭区间 [left,right],统计有多少个连续子数组,其元素之和落在 [left,right] 内。
朴素做法:
小明的数学老师带来了一叠数字卡牌,每张卡牌上都有一个整数,牌面数字可能是正数、负数或零。老师将这些卡牌按某个顺序排好并展示出来,同时他在黑板上写下一个闭区间 [left,right]。
老师要求小明从排好的卡牌中连续抽取一个非空片段,片段的起始位置和结束位置都可以任意选择。一个抽取方案对应一个下标区间 [l,r],表示选中从第 l 张到第 r 张的全部卡牌。设这个片段内所有卡牌数字之和为 s。如果 left≤s≤right,则这个方案是合法的。
注意,只要两个方案的下标区间 [l,r] 不同,即使卡牌数字相同,也视为不同的抽取方法。请帮小明计算合法抽取方法的总数。
约束条件
1,且不超过 10000。-255 到 255 之间。-2550000 到 2550000 之间,并且 left≤right。第一行包含一个整数 n,表示纸牌数量。
第二行包含 n 个整数,依次表示这叠卡牌上的数字序列 papers。
第三行包含两个整数 left 和 right,表示目标闭区间的左端点和右端点。
输出一个整数,表示满足条件的合法抽取方案数量。
输入
4
1 -2 3 1
1 3
输出
7
说明
卡牌数字依次为 1、-2、3、1。
合法连续片段有:
[1,1],和为 1; [1,3],和为 1−2+3=2; [1,4],和为 1−2+3+1=3; [2,3],和为 −2+3=1; [2,4],和为 −2+3+1=2; [3,3],和为 3; [4,4],和为 1。
这些片段的数字和都在 [1,3] 内,因此合法抽取方法数为 7。
输入
2
5 5
10 10
输出
1
说明
卡牌只有两张,数字均为 5。
连续非空片段中,单个片段的和都是 5,不满足 10≤s≤10;只有同时抽取两张卡牌时,和为 5+5=10,满足条件。
因此合法抽取方法数为 1。
输入
3
-1 -2 -3
-5 -3
输出
3
说明
所有连续非空片段的和分别为:
[−1]:−1,不在 [−5,−3] 内; [−1,−2]:−3,满足; [−1,−2,−3]:−6,小于左端点 −5; [−2]:−2,不满足; [−2,−3]:−5,满足; [−3]:−3,满足。
因此合法抽取方法数为 3。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册