题目链接:https://codeforces.com/contest/1364/problem/A
题意
找出大小为 $n$ 的数组 $a$ 的最长连续子数组,其元素和不被 $x$ 整除。
题解
- 如果数组的每个元素都被 $x$ 整除,则不存在不被 $x$ 整除的子数组
- 如果整个数组之和不被 $x$ 整除,答案即为整个数组
- 如果整个数组之和被 $x$ 整除,删去最短的不被 $x$ 整除的一端子数组
代码
#include <bits/stdc++.h> using namespace std; void solve() { int n, x; cin >> n >> x; int a[n] = {}, sum = 0; for (int i = 0; i < n; i++) { cin >> a[i]; a[i] %= x, sum += a[i]; } if (sum == 0) cout << -1 << " "; else if (sum % x) cout << n << " "; else { int l = 0, r = n - 1; while (a[l] == 0) ++l; while (a[r] == 0) --r; cout << max(n - 1 - l, r) << " "; } } int main() { int t; cin >> t; while (t--) solve(); }