XXXXX (Codeforces 1364A)
Tags: Others, number theory

Ehab loves number theory, but for some reason he hates the number $$$x$$$. Given an array $$$a$$$, find the length of its longest subarray such that the sum of its elements isn't divisible by $$$x$$$, or determine that such subarray doesn't exist.An array $$$a$$$ is a subarray of an array $$$b$$$ if $$$a$$$ can be obtained from $$$b$$$ by deletion of several (possibly, zero or all) elements from the beginning and several (possibly, zero or all) elements from the end.

Input: The first line contains an integer $$$t$$$ $$$(1 \le t \le 5)$$$ — the number of test cases you need to solve. The description of the test cases follows.The first line of each test case contains 2 integers $$$n$$$ and $$$x$$$ ($$$1 \le n \le 10^5$$$, $$$1 \le x \le 10^4$$$) — the number of elements in the array $$$a$$$ and the number that Ehab hates.The second line contains $$$n$$$ space-separated integers $$$a_1$$$, $$$a_2$$$, $$$\ldots$$$, $$$a_{n}$$$ ($$$0 \le a_i \le 10^4$$$) — the elements of the array $$$a$$$.

Output: For each testcase, print the length of the longest subarray whose sum isn't divisible by $$$x$$$. If there's no such subarray, print $$$-1$$$.

Note: In the first test case, the subarray $$$[2,3]$$$ has sum of elements $$$5$$$, which isn't divisible by $$$3$$$.In the second test case, the sum of elements of the whole array is $$$6$$$, which isn't divisible by $$$4$$$.In the third test case, all subarrays have an even sum, so the answer is $$$-1$$$.

Sample Inputs:
3
3 3
1 2 3
3 4
1 2 3
2 2
0 6

Sample Outputs:
2
3
-1

Solution (Python):
for _ in range(int(input())):
    (a, b) = map(int, input().split())
    s = -1
    A = list(map(lambda x: int(x) % b, input().split()))
    if sum(A) % b:
        print(a)
        continue
    for i in range(a // 2 + 1):
        if A[i] or A[~i]:
            s = a - i - 1
            break
    print(s)

Solution (Python):
for _ in range(int(input())):
    (a, b) = map(int, input().split())
    s = -1
    A = list(map(lambda x: int(x) % b, input().split()))
    if sum(A) % b:
        print(a)
        continue
    for i in range(a // 2 + 1):
        if A[i] or A[~i]:
            s = a - i - 1
            break
    print(s)

Solution (Python):
def hatenumber(n, x, array):
    ans = 0
    if sum(array) % x != 0:
        ans = n
    else:
        for i in array:
            if i % x == 0:
                pass
            else:
                start = array.index(i)
                ans = n - start - 1
                break
        array.reverse()
        for j in array:
            if j % x == 0:
                pass
            else:
                end = array.index(j)
                ans = max(ans, n - end - 1)
                break
    ans = -1 if ans == 0 else ans
    return ans
t = int(input())
for _ in range(t):
    (n, x) = map(int, input().split())
    array = list(map(int, input().split()))
    print(hatenumber(n, x, array))