122AC - ABC063C: Bugged

ABC063-C (300 points)
問題

集合  S = \{ s_1, s_2, \ldots , s_N \} の部分和のうち,  10 の倍数でないものの最大値を求める.

  •  1 \leq N \leq 100
  •  1 \leq s_i \leq 100
  • 入力は全て整数
方針
  •  1 \leq s_i なので,  \sum s_i 10 の倍数でなければ最大値.
  •  \sum s_i 10 の倍数である場合, 集合  S の要素の中に  10 の倍数でない数があれば, そのような数の中で最小のものを  s_n として,  \sum_{i \neq n} s_i が最大値.
  • 集合  S の要素が全て  10 の倍数がある場合には, どのように部分和をとっても  10 の倍数になるので, 最大値はゼロ.
# input
N = int(input())
S = [int(input()) for _ in range(N)]

S = sorted(S)

n = -1 # 10の倍数でない配点の最小値

for i in range(N):
    if S[i] % 10 != 0:
        n = i
        break

if n == -1: # 配点が全て10の倍数の場合
    print(0)
elif sum(S) % 10 != 0: # 全て足して10の倍数にならない場合
    print(sum(S))
else: # 全合計が10の倍数の場合
    print(sum(S) - S[n]) # 10の倍数ではない最小配点の問題に不正解