题库首页 › 蓝桥杯大赛(C语言) › 题目 14698

给定包含n个整数的数列,从中选取一段连续子数列,使其元素之和能被k整除。 请找出符合要求的最长连续子数列并输出其长度以及子数列本身;如果符合要求的最长连续子数列有多个,则输出起始位置最靠后的那个子数列。如果不存在符合要求的子数列,则输出-1。 例如:n=7,k=7,数列为7、3、4、1、5、14、9; 连续子数列{7}、{7,3,4}、{3,4}、和{5,14,9}的和都能被7整除;其中最长的连续子数列有{7,3,4}和{5,14,9},起始位置最靠后的是{5,14,9}。 故符合要求的最长连续子数列长度为3,子数列为5 14 9。 输入描述 第一行输入两个整数n和k(1≤n≤105,2≤k≤108),整数之间以一个空格隔开; 第二行输入n个整数(1≤整数≤104),整数之间以一个空格隔开。 输出描述 如果存在符合要求的最长连续子数列,则输出为两行: 第一行输出一个整数,表示最长连续子数列的长度; 第二行输出若干个整数,表示起始位置最靠后的最长连续子数列,整数之间以一个空格隔开。 如果不存在,则输出-1。 输入样例 7 7 7 3 4 1 5 14 9 输出样例 3 5 14 9

正确答案:参考程序(Python):n,k=map(int,input().split());a=list(map(int,input().split()));pre={0:-1};s=0;best=-1;st=0;for i,x in enumerate(a):s+=x;r=s%k;if r in pre:l=pre[r];L=i-l;if L>best:best=L;st=l+1;else:pre[r]=i;print(-1 if best==-1 else best);print(' '.join(map(s

试卷来源:202409(第15届)蓝桥杯C++编程青少组(国赛_中高级)真题

本卷相关题目

在线做题 同科目题库