import sys
import itertools
import numpy as np
from math import comb
def compute_max_region_count(k, n, vectors):
# 1. 초기 영역분할 최대 수 p 계산
p = sum(comb(n, i) for i in range(k + 1)) # p = nC0 + nC1 + ... + nCk
# 2. 조합을 이용하여 벡터 선택 및 랭크 검사
for r in range(2, k + 1): # 2개부터 k개까지 선택
for subset in itertools.combinations(vectors, r):
matrix = np.array(subset)
if np.linalg.matrix_rank(matrix) < r:
p -= 1 # 랭크가 부족하면 p 감소
return p
# 입력 처리
k, n = map(int, input().split()) # 첫 줄 입력: k 차원, n개의 벡터
vectors = [list(map(int, input().split())) for _ in range(n)] # n개의 벡터 입력
# 결과 계산 및 출력
print(compute_max_region_count(k, n, vectors))
이 코드는 방향벡터만 입력받기 때문에, 주어진 방향 벡터의 한에서 최대로 분할할 수 있는 영역의 개수 코드이다.(그니까 세 직선이 한점에서 만난다거나 이런 경우는 없게 만들 수 있다는 뜻)
원점과 떨어진 거리 r도 입력받아 그냥 나눠지는 영역의 개수를 구하면 얼마나 좋을까.. 더 생각해보자