
Lv.1
已退,爱大家! QQ:2994623819 wx:IsabellaHuang0920
签名:已退喵,感谢陪伴 找到你是我最最伟大的成功! 我还是会神不知鬼不觉回来的! v x:15920469963
在 小白的C++彩蛋小锦集 中回复
我也来玩玩(?)
题目描述输入一个非负整数数组a[1...n],求这个数组中有多少个非空的连续子序列的总和小于等于k。
输入格式第一行包括一个整数n,代表数组的长度。 第二行包括n个非负整数,代表这个数组。 第三行包括一个整数k,代表求这个数组中有多少个非空的连续子序列的总和小于等于k。
输出格式一个整数,代表这个数组中有多少个非空的连续子序列的总和小于等于k。
输入输出样例 输入 #1<button class="copy-btn lfe-form-sz-mi喵le" type="button" data-v-370e72e2="" data-v-52f2d52f="">复制</button>5 1 2 3 4 5 5输出 #1<button class="copy-btn lfe-form-sz-mi喵le" type="button" data-v-370e72e2="" data-v-52f2d52f="">复制</button>
7
--------------------------------------代码------------------------------------------------
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
int a[1000005];
ll sum[1000005];
int main(){
int n,k;
cin >> n;
for (int i = 1;i <= n;i++){
cin >> a[i];
sum[i] = a[i] + sum[i - 1];
}
cin >> k;
ll ans = 0;
for (int l = 1;l <= n;l++){
int R = upper_bound(sum + 1,sum + n + 1,k + sum[l -1]) - sum;
ans += R - l;
}
printf("%lld\n",ans);
return 0;
}
--------------------------------------------------------------------
真好我又氵了一题))))2021-03-27T14:53:53 点赞:0