测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A30950. 买地攻略数码城市有土地出售。待售的土地被划分成若干块,每一块标有一个价格。这里假设每块土地只有两块相邻的土地,除了开头和结尾的两块是只有一块邻居的。每位客户可以购买多块连续相邻的土地。现给定这一系列土地的标价,请你编写程序,根据客户手头的现金量,告诉客户有多少种不同的购买方案。 104)为土地分割的块数(于是这些…

填空题 中等

题目描述

买地攻略

数码城市有土地出售。待售的土地被划分成若干块,每一块标有一个价格。这里假设每块土地只有两块相邻的土地,除了开头和结尾的两块是只有一块邻居的。每位客户可以购买多块连续相邻的土地。

现给定这一系列土地的标价,请你编写程序,根据客户手头的现金量,告诉客户有多少种不同的购买方案。

时间限制:8000         内存限制:262144

输入

输入首先在第一行给出两个正整数:N(≤ 104)为土地分割的块数(于是这些块从 1 到 N 顺次编号);M(≤ 109)为客户手中的现金量。 随后一行给出 N 个正整数,其中第 i 个数字就是第 i 块土地的标价。 题目保证所有土地的总价不超过 109。

输出

在一行中输出客户有多少种不同的购买方案。请注意客户只能购买连续相邻的土地。

样例输入

5 85

38 42 15 24 9

样例输出

11

样例解释

这 11 种不同的方案为: 38 42 15 24 9 38 42 42 15 42 15 24 15 24 15 24 9 24 9

参考答案

#include<iostream> using namespace std; int main(){ int n,m; //n块地 m块钱 long long a[10005]={0}; //a[i]前i块地的前缀和 cin>>n>>m; for(int i=1;i<=n;i++){ int x; cin>>x; a[i]=a[i-1]+x; //前缀和 } int cnt=0; for(int i=1;i<=n;i++){ //从i开始 for(int j=i;j<=n;j++){ //到j的土地 if(a[j]-a[i-1]<=m){ //够钱买 cnt++; }else break; //不够钱,后面更多土地就更不够了 } } cout<<cnt; }
上一题 下一题