题目:序列中任意个连续的元素组成的子序列称为该序列的子串。 现在给你一个序列P和一个整数K,询问元素和是K的倍数的子串的最大长度。比如序列【1,2,3,4,5】,给定的整数K为 5,其中满足条件的子串为{5}、{2,3}、{1,2,3,4}、{1,2,3,4,5},那么答案就为 5,因为最长的子串为{1,2,3,4,5};如果满足条件的子串不存在,就输出 0。
输入描述:
第一行包含一个整数N, 1 ≤ 𝑁 ≤ 105。
第二行包含 N 个整数𝑝𝑖,𝑝𝑖表示序列P第i个元素的值。0 ≤ 𝑝𝑖 ≤ 105。第三行包含一个整数K,1 ≤ 𝐾 ≤ 105。
输出描述:
输出一个整数ANS,表示答案。
code:
def maxSub(n, nums, k):
nums = [0] + nums
mod = [-1] * k
mod[0] = 0
#print(mod)
ans = 0
for i in range(1, len(nums)):
nums[i] = nums[i] + nums[i - 1] # nums[i]为第几个子数组的和
print(nums[i])
m = nums[i] % k
if mod[m] != -1:
if ans < i - mod[m]:
ans = i - mod[m]
else:
mod[m] = i
return ans
if __name__ == '__main__':
n = 5#int(input())
nums = [1, 2, 3, 4, 5]#list(map(int, input().split()))
k = 5#int(input())
print(maxSub(n, nums, k))
程序运行结果为:
5
网友评论