【競プロ典型90問】「046 - I Love 46(★3)」解法
Free-PhotosによるPixabayからの画像

このシリーズではE869120さんによって作成された競プロ典型90問をPythonで解いています。

問題

046 - I Love 46(★3)

ポイント

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()

おすすめの記事