![]() |
#2
diycai2021-11-17 12:59
![]() #include <stdio.h> int goodSeries(int *a, int n, int s) { int i, len=0, b=-1, t=-1; for (i=0; i<n-1; i++) { if (((a[i]+a[i+1])%s) == 0) { b = 2; break; } } if (s&1) { for (i=0; i<n; i++) { if ((a[i]%s) == 0) { len++; } else { if (len > b) { b = len; } len = 0; } } if (len > b) { b = len; } } else { for (i=0; i<n; i++) { if ((a[i]%s) == t) { len++; } else { if (len > b) { b = len; } t = -1; len = 0; if ((a[i]%s) == 0) { t = 0; len++; } else if ((a[i]%s) == (s>>1)) { t = s>>1; len++; } } } if (len > b) { b = len; } } return b; } void main() { int a[100000]; int n, k, i, b; char tmp; scanf("%d%d", &n, &k); for (i=0; i<n; ) { if (scanf("%d", a+i) == 0) { scanf("%c", &tmp); continue; } i++; } b = goodSeries(a, n, k); printf("%d\n", b); } |
题目描述
一个长度大于等于2的数列,且其中任
意两个元素Ai和Aj(i≠j)的和Ai+Aj都能整除K,我们称其为K型好数列。
现在输入一个长度为N的数列A=[A1,A2,...AN]以及一个整数K,请你找出A的最长的K型好数列B,输出B的长度。
如果这样的子数组不存在,输出-1.
输入格式
第一行包含两个整数N和K.
第二行包含N个整数A1,A2,...AN.
1≤N≤100000
1≤Ai, K≤1000000000
输出格式
一个整数,表示答案。