3SUM (Codeforces 1692F)
Tags: Math, brute force

Given an array $$$a$$$ of positive integers with length $$$n$$$, determine if there exist three distinct indices $$$i$$$, $$$j$$$, $$$k$$$ such that $$$a_i + a_j + a_k$$$ ends in the digit $$$3$$$.

Input: The first line contains an integer $$$t$$$ ($$$1 \leq t \leq 1000$$$) — the number of test cases.The first line of each test case contains an integer $$$n$$$ ($$$3 \leq n \leq 2 \cdot 10^5$$$) — the length of the array.The second line of each test case contains $$$n$$$ integers $$$a_1, a_2, \dots, a_n$$$ ($$$1 \leq a_i \leq 10^9$$$) — the elements of the array.The sum of $$$n$$$ across all test cases does not exceed $$$2 \cdot 10^5$$$.

Output: Output $$$t$$$ lines, each of which contains the answer to the corresponding test case. Output "YES" if there exist three distinct indices $$$i$$$, $$$j$$$, $$$k$$$ satisfying the constraints in the statement, and "NO" otherwise.You can output the answer in any case (for example, the strings "yEs", "yes", "Yes" and "YES" will be recognized as a positive answer).

Note: In the first test case, you can select $$$i=1$$$, $$$j=4$$$, $$$k=3$$$. Then $$$a_1 + a_4 + a_3 = 20 + 84 + 19 = 123$$$, which ends in the digit $$$3$$$.In the second test case, you can select $$$i=1$$$, $$$j=2$$$, $$$k=3$$$. Then $$$a_1 + a_2 + a_3 = 1 + 11 + 1 = 13$$$, which ends in the digit $$$3$$$.In the third test case, it can be proven that no such $$$i$$$, $$$j$$$, $$$k$$$ exist. Note that $$$i=4$$$, $$$j=4$$$, $$$k=4$$$ is not a valid solution, since although $$$a_4 + a_4 + a_4 = 1111 + 1111 + 1111 = 3333$$$, which ends in the digit $$$3$$$, the indices need to be distinct.In the fourth test case, it can be proven that no such $$$i$$$, $$$j$$$, $$$k$$$ exist.In the fifth test case, you can select $$$i=4$$$, $$$j=3$$$, $$$k=1$$$. Then $$$a_4 + a_3 + a_1 = 4 + 8 + 1 = 13$$$, which ends in the digit $$$3$$$.In the sixth test case, you can select $$$i=1$$$, $$$j=2$$$, $$$k=6$$$. Then $$$a_1 + a_2 + a_6 = 16 + 38 + 99 = 153$$$, which ends in the digit $$$3$$$.

Sample Inputs:
6
4
20 22 19 84
4
1 11 1 2022
4
1100 1100 1100 1111
5
12 34 56 78 90
4
1 9 8 4
6
16 38 94 25 18 99

Sample Outputs:
YES
YES
NO
NO
YES
YES

Solution (Python):
from collections import Counter
from itertools import combinations
import sys
input = sys.stdin.readline
for _ in range(int(input())):
    n = int(input())
    d = Counter(map(lambda x: x[-1], input().split()))
    s = []
    for (key, value) in d.items():
        s += [int(key)] * min(value, 2)
    if d['1'] >= 3:
        s += [1]
    fl = False
    for combo in combinations(s, 3):
        if sum(combo) % 10 == 3:
            fl = True
            break
    print('YES') if fl else print('NO')

Solution (Python):
def precompute():
    pass

def solve():
    n = int(input())
    a = list(map(int, input().split()))
    t = [0] * 10
    for i in a:
        t[i % 10] += 1
    for i in range(10):
        if t[i] >= 3:
            if 3 * i % 10 == 3:
                print('YES')
                return
    for i in range(10):
        if t[i] >= 2:
            for j in range(10):
                if t[j] > 0:
                    if (i + i + j) % 10 == 3 and i != j:
                        print('YES')
                        return
    for i in range(10):
        if t[i] > 0:
            for j in range(10):
                if t[j] > 0:
                    for k in range(10):
                        if t[k] > 0:
                            if (i + j + k) % 10 == 3 and i != j and (j != k) and (i != k):
                                print('YES')
                                return
    print('NO')
t = 1
precompute()
t = int(input())
for _ in range(t):
    solve()

Solution (Python):
t = int(input())
from collections import defaultdict
while t > 0:
    n = int(input())
    a = list([int(x) % 10 for x in input().split(' ')])
    a2 = []
    d = defaultdict(int)
    for v in a:
        if d[v] < 3:
            d[v] += 1
            a2.append(v)
    good = False
    a = a2
    for i in range(0, len(a)):
        l = i + 1
        r = len(a) - 1
        h = set()
        for j in range(i + 1, len(a)):
            if (3 - a[i] - a[j]) % 10 in h:
                good = True
                break
            h.add(a[j] % 10)
        if good:
            break
    if not good:
        print('NO')
    else:
        print('YES')
    t -= 1