用户:
醉醉白凰查看:4 回复:6 评论:4 创建时间:2021-03-27T09:55:06

懒得写算法了……凑活看吧
青柠檬_肉乎乎的兔子我也来玩玩(?)
题目描述输入一个非负整数数组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;
}
--------------------------------------------------------------------
真好我又氵了一题))))点赞0
评论