Codeforces Round #649 (Div. 2) A. XXXXX

题目链接: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();
}
原文地址:https://www.cnblogs.com/Kanoon/p/13125654.html