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

A25669. 浇花系统

填空题 中等

题目描述

浇花系统

题目描述

有n棵植物,排成一排,从左到右的编号分别为:1,2,3,......,n ;n颗植物所需的水量分别为:w1,w2,w3,......wn 。小丁为植物设计了一套浇水系统。

浇水系统:每次会将连续的L棵植物分别浇1份水。每棵植物可以被重复浇水,如果当前植物已经满足所需水量,系统会将多浇的水排到水池中。

请计算浇水系统最少要浇多少次才能满足所有植物所需水量,以及排到水池的水量。

例如:n=4,L=3;4棵植物所需要的水量分别为1、1、3、2,浇水系统每次会将连续的 3 棵植物分别浇上1份水。以下是浇水次数最少的一种方式:

• 第一次:将第1、2、3 棵植物分别浇上1份水,浇水后4棵植物所需水量为0、0、2、2;

• 第二次:将第 2、3、4 棵植物分别浇上1份水,浇水后4棵植物所需水量为0、0、1、1,由于第2棵植物已经满足所需水量,所以系统会将此次多余的1份水排到水池;

• 第三次:将第 2、3、4棵植物分别浇上1份水,浇水后4棵植物所需水 量为0、0、0、0,此次系统也会将第2棵植物多余的1份水排到水池;所以,浇水系统最少需要浇3次,并且将多余的2份水排到水池。

输入描述

第一行输入两个整数n、L(1 ≤ L ≤ n ≤ 1000),分别表示植物的数量和浇水系统每次连续浇灌的植物数量,整数之间以一个空格隔开。

第二行输入n个整数w(0 <= w; <= 1000) ,分别表示编号 1~n 的植物所需的水量,整数之间以一个空格隔开。

输出描述

输出两个整数,分别表示浇水系统最少的浇水次数,以及排到水池的水量,整数之间以一个空格隔开。

样例输入

4 3
1 1 3 2

样例输出

3 2

参考答案

n, L = map(int,input().split()) plants = list(map(int,input().split())) times = 0 water = 0 i = 0 for i in range(n - L + 1):# 前n-L个植物浇水 if plants[i] > 0: time = plants[i]# 将浇水量设为当前植物需水量 for j in range(i, i + L):# 往后取L个浇水 plants[j]-= time # 浇水 if plants[j] < 0:# 如果小于0,代表需要排水 water -= plants[j] plants[j] = 0 times += time if max(plants[-L:]) > 0:# 后面L个存在需要水的植物 time = max(plants[-L:])# 直接浇最多需水量的水 for j in range(L): plants[j - L] -= time if plants[j - L] < 0: water -= plants[j - L] times += time print(times, water)

答案解析

使用循环遍历所需水量列表,如果当前需水量plants[i]大于0,则将浇水次数设为plants[i],从当前植物往后取三个植物,均浇水plants[i],也就是都减少plants[i]。如果浇水后小于0,则将计入排水量。

后面L个需要单独运算,如果后面L个所需水量存在大于0的情况,则将浇水量设为三个中需水量最大的值,并完成浇水,排水量计算。

上一题 下一题