부분합이 d 이하인 것들의 갯수를 세어 각 부분합이 나온 갯수에서 2개를 뽑는 조합의 수를 모두 더해준다.
import sys
input = sys.stdin.readline
for _ in range(int(input())):
d, n = map(int, input().split())
arr = list(map(lambda x: int(x)%d, input().split()))
visited = [1] + [0] * 1000000
sum_n = 0
for num in arr:
sum_n = (sum_n + num) % d
visited[sum_n] += 1
result = 0
for i in range(d):
result += visited[i]*(visited[i]-1)//2
print(result)
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 4134 다음 소수 (0) | 2021.09.03 |
---|---|
[백준][Python] 16934 게임닉네임 : Trie (0) | 2021.09.03 |
[백준][Python] 1747 소수&펠린드롬 (0) | 2021.09.02 |
[백준][Python] 3613 Java vs C++ (0) | 2021.09.02 |
[백준][Python] 15900 나무탈출 (0) | 2021.09.02 |