题目描述
近些年来,我国防沙治沙取得显著成果。某沙漠新种植N棵胡杨(编号1-N),排成一排。一个月后,有M棵胡杨未能成活。现可补种胡杨K棵,请问如何补种(只能补种,不能新种),可以得到最多的连续胡杨树?
输入描述
N:总种植数量,1<=N<=100000
M:未成活胡杨数量,1<=M<=N
M 个空格分隔的数,按编号从小到大排列
K:最多可以补种的数量,0<=K<=M
输出描述
最多的连续胡杨棵树
示例1
输入
5
2
2 4
1
输出
3
说明:补种到2或4结果一样,最多的连续胡杨棵树都是3
不多说,直接上代码,自己写的,验证了机组数据都正确,没地方验证,如果发现哪里有问题,请留言讨论。
while True:
try:
n = int(input())
m = int(input())
death = list(map(int,input().split()))
k = int(input())
s = '1'*n #字符串表示所有树
for i in death:
s = s[0:i-1] + '0' + s[i:] #死掉的树用0表示
tmp = list(map(str,s.split('0'))) #用0分隔字符串,存到列表,每两项代表中间有一棵死掉的树
res = 0 #保存最终结果
for i in range(len(tmp)-k): #最长肯定是项越多越好,补一颗可以连两项,以此类推
l = 0 #第i项开始,加后面k项的长度
for j in range(i,i+k+1):
l += len(tmp[j])
res = max(res,l+k) #加上补种的k棵树
print(res)
except:
break