| ps | |
|---|---|
| 링크 | acmicpc.net/… |
| 출처 | BOJ |
| 문제 번호 | 18719 |
| 문제명 | Binomial |
| 레벨 | 플래티넘 1 |
| 분류 |
수학, 조합론, DP |
| 시간복잡도 | t*(n + mlogm) |
| 인풋사이즈 | t<=10, n<=10^6, m<=10^6 |
| 사용한 언어 | PyPy |
| 제출기록 | 335168KB / 3392ms |
| 최고기록 | 3392ms |
| 해결날짜 | 2021/02/07 |
"""Solution code for "BOJ 18719. Binomial".
- Problem link: https://www.acmicpc.net/problem/18719
- Solution link: http://www.teferi.net/ps/problems/boj/18719
To get AC, this code should be submitted with PyPy3, not Python3.
"""
def main():
z = int(input())
for _ in range(z):
n = int(input()) # pylint: disable=unused-variable
a = [int(x) for x in input().split()]
max_a = max(a)
count = [0] * (max_a + 1)
for a_i in a:
count[a_i] += 1
for i in range(max_a.bit_length() + 1):
for num in range(max_a + 1):
if num & (1 << i):
count[num] += count[num ^ (1 << i)]
print(sum(count[a_i] for a_i in a))
if __name__ == '__main__':
main()