黒ココアさんのメモ置き場

メモを置いたり置かなかったり

ABC344 C - A+B+C

atcoder.jp

問題

  • 3個の数列$A,B,C$が与えられるよ
  • 長さ$Q$の数列$X$も与えられるよ
  • 各$i=1,...,Q$について、以下の問題に答えてね
    • $A,B,C$から要素を1つずつ選んで、和を$X_{i}$にすることができる?

成約

  • $1 \leq |A|,|B|,|C| \leq 100$
  • $0 \leq A_i, B_i ,C_i \leq 10^{8}$
  • $1 \leq Q \leq 2 \times 10^{5}$
  • $0 \leq X_{i} \leq 3\times 10^{8}$

思考

  • $A,B,C$はそんなに長くないですね
    • (Aの要素1つ)+(Bの要素1つ)+(Cの要素1つ)のパターンは、$100^{3}$個しか無いね!
    • 前準備として、先に要素を1つずつ選んだ和として作れるものを全部列挙しておくと、$X$の質問にすぐ答えられるね!

コード

N = int(input())
A_L = list(map(int, input().split()))
M = int(input())
B_L = list(map(int, input().split()))
L = int(input())
C_L = list(map(int, input().split()))
Q = int(input())
X_L = list(map(int, input().split()))

sum_s = set()
for a in A_L:
    for b in B_L:
        for c in C_L:
            sum_s.add(a + b + c)

for x in X_L:
    if x in sum_s:
        print("Yes")
    else:
        print("No")