#include <iostream>
#include <map>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int N, K;
cin >> N;
vector<int> nums(N);
for (int i = 0; i != N; ++i) {
cin >> nums[i];
}
cin >> K;
map<int, vector<int>> indexInfo;
indexInfo[0].push_back(0);
int cur = 0, maxLen = 0;
for (int i = 0; i != N; i++) { cur = (cur + nums[i]) % K;
if (indexInfo[cur].size() != 0){
maxLen = max(maxLen, i - indexInfo[cur].front());
}
indexInfo[cur].push_back(i); }
cout << maxLen << endl;
return 0;
}
具体思想可以看这篇博客,
https://jdhao.github.io/2017/09/01/longest-subarray-modulo-K/