最长子序列
- 求最长子序列,满足和是一个数的倍数。
题目链接
#include<bits/stdc++.h>
#define ll long long
#define N 100005
int inf = 0x3f3f3f3f;
using namespace std;
ll n, k, a[N];
int main (){
cin >> n >> k; //N个数,所求序列和是K的倍数
for(int i = 1; i <= n; i++){ //读入数据
cin >> a[i];
}
int ans = 0; //答案
for(int i = 1; i <= n; i++){
if(n - i + 1 < ans) //简单的n方复杂度不行,在这里加个判断
break; //如果后面的序列长度小于ans,就直接退出。
ll sum = 0;
for(int j = i; j <= n; j++){
sum += a[j];
if(sum % k == 0){
ans = max(ans, j - i + 1);
}
}
}
cout << ans <<endl;
return 0;
}