このシリーズではE869120さんによって作成された競プロ典型90問をPythonで解いています。
問題
ポイント
Ai + Bj + Ckが46で割り切れるとき
Ai ÷ 46 の余り + Bi ÷ 46 の余り + Ci ÷ 46の余りも46で割り切れます。
この問題はここに気がつけるかがポイントとなります。
コード
def main():
import sys
sys.setrecursionlimit(10 ** 9)
input = sys.stdin.readline
N = int(input())
A = list(map(int, input().split(" ")))
B = list(map(int, input().split(" ")))
C = list(map(int, input().split(" ")))
num_A = [0 for _ in range(46)]
num_B = [0 for _ in range(46)]
num_C = [0 for _ in range(46)]
for i in range(N):
tmp_A = A[i] % 46
tmp_B = B[i] % 46
tmp_C = C[i] % 46
num_A[tmp_A] += 1
num_B[tmp_B] += 1
num_C[tmp_C] += 1
ans = 0
for a in range(46):
for b in range(46):
for c in range(46):
if (a + b + c) % 46 == 0:
ans += num_A[a] * num_B[b] * num_C[c]
print(ans)
if __name__ == '__main__':
main()