본문 바로가기

분류 전체보기

(133)
백준 10793번 Tile Cutting 문제 요약 직사각형 모양의 타일이 있을 때, 해당 직사각형에서 평행사변형 모양의 타일을 떼어낼 것이다. 직사각형 모양의 타일은 전부 변의 길이가 정수이다. 평행사변형을 떼어내는 방법을 막 설명하는데 요점은 평행사변형의 모든 꼭짓점이 직사각형의 각 변위에 놓여야 하며 꼭짓점이 놓일 수 있는 위치는 정수 점들 뿐이다. 이 때, lo, hi가 주어지는데 이는 평행사변형의 넓이를 뜻한다. lo부터 hi까지의 넓이를 갖는 평행사변형을 만들려고 하는데 만드는 방법의 수가 가장 많은 넓이를 찾고 그 방법의 수를 출력하는 것이다. 풀이 일단 어떤 직사각형이 주어지고 그 직사각형에서 유효한 평행사변형 하나를 만들었다고 하자. 그러면 아래와 같은 꼴이 될 것이다. 이 평행 사변형의 넓이는 직사각형의 넓이에서 네 귀퉁이에 ..
백준 11618번 Frightful Formula 문제 요약 F라는 N by N 2차원 배열에서 F[N][N]을 구해야 한다. 배열의 1열과 1행은 전체가 주어진다. F[i][j]는 아래와 같이 정의된다. $$ F[i][j]=aF[i][j-1]+bF[i-1][j]+c $$ 풀이 일일이 다 구하는 것은 시간초과가 나니까 논외다. 주어진 점화식에서 상수항이 좀 귀찮으니 상수항을 뗀 상태로 생각해보자. 1행과 1열이 다 주어지는데 1행과 1열의 각 원소가 상수항을 떼냈을 때 F[N][N]에 미치는 영향이 어느 정도인지를 한 번 보자. 0 1 0 0 0 0 b ab a2b a3b 0 b2 2ab2 3a2b2 4a3b2 0 b3 3ab3 6a2b3 10a3b3 0 b4 4ab4 10a2b4 20a3b4 (1,2)에 1이 있을 때 그 1이 각 셀에 끼치는 영향을 ..
백준 10531번 Golf Bot 먼저 수가 N개 들어옵니다. 들어오는 수의 범위는 1이상 200,000이하입니다. 그리고 수가 M개 들어옵니다. 문제에서 원하는 것은 N개의 수들 중에서 1개 혹은 2개를 사용해서 합해서 M개의 수 중에서 만들 수 있는 수들의 개수입니다. N개의 수들로 다항식을 만듭니다. 등장한 수를 차수로 가지는 항의 계수만 1이고 나머지 항들의 계수는 0입니다. 이 다항식의 제곱을 구하면 수 2개의 합으로 구할 수 있는 수들을 알 수 있습니다. 이를 통해 문제 해결이 가능합니다. 다항식의 곱을 FFT로 구하지 않으면 시간제한에 걸립니다. #include #include #include #include using namespace std; typedef complex cdbl; bool possible[200005];..
백준 17104번 골드바흐 파티션 2 짝수 N이 주어졌을 때, N을 두 소수의 합으로 나타내는 경우를 찾는 문제입니다. N이 최대 1,000,000입니다. 소수차 항의 계수가 1이고 나머지 항의 계수는 0인 1,000,000차 다항식을 만들고 FFT를 통해 이 다항식의 제곱을 구해서 해결하는 방법을 생각해 볼 수 있습니다. 그러나, 시간제한이 0.5초로 빡빡하여 이 방법이 불가능합니다. 조금 바꿔서 생각을 해보죠. 홀수 소수 $p,q$는 $p = 2a+1, q = 2b+1$로 나타낼 수 있습니다. $p+q=N$이라면, $N=2k=2(a+b+1)$이 됩니다. 따라서, N을 입력받았을 때 $k-1=a+b$가 되는 경우를 세면 우리가 원하는 답이 됩니다. 즉, 모든 소수 1,000,000 이하의 소수 p에 대해서 $(p-1)/2$차 항의 계수만 ..
백준 5051번 피타고라스의 정리 N이 주어졌을 때, 아래를 만족하는 $(a,b,c)$쌍의 개수를 찾는 것이 목표입니다. $$ 0 \lt a,b,c \lt N, \quad a \le b, \quad a^2 + b^2 \equiv c^2 \pmod N $$ N이 최대 500,000이기 때문에 나이브하게 구하면 시간초과가 납니다. 위에서 요구하고 있는 식을 잘 보면 결국 두 수의 합이 특정 수가 되는 경우의 수를 원하는 것입니다. 생성함수를 이용해 접근합시다. 다음과 같은 다항식을 생각합시다. $$ f(x) = \sum_{i=0}^{N-1}a_ix^i, \quad a_i = \vert S_i \vert \quad where \quad S_i=\{x \vert x^2 \equiv i \pmod N, 0 \lt x \lt N\} $$ 이제 이렇..
백준 15576번 큰 수 곱셈 (2) 정수 A와 B가 주어지는데 두 수의 곱을 구하라고 하는 간단한 문제입니다. 수의 길이가 최대 300,000자리라는 점만 빼고요. A가 N자리, B가 M자리 수라고 합시다. $$ \begin{aligned} A=a_{N-1}a_{N-2} \cdots a_1 a_0 \\ B=b_{M-1}b_{M-2} \cdots b_1 b_0 \end{aligned} $$ 위와 같이 표현할 수 있는데 이를 통해서 다항식을 만듭시다. $$ \begin{aligned} f(x) = \sum_{i=0}^{N-1}a_ix^i \\ g(x) = \sum_{i=0}^{M-1}b_ix^i \end{aligned} $$ $f(10), g(10)$은 각각 A, B가 됩니다. 따라서, 두 수의 곱은 $h(x)=f(x)g(x)$를 FFT를 이..
백준 11714번 Midpoint 문제 요약 2차원 평면 상에서 점 $ L+M+N $개가 주어지는데, 처음 점 $L$개 $A_1,...,A_L$는 직선 $\ell_A$에 놓여있고, 그 다음 $M$개 $B_1,...,B_M$개는 직선 $\ell_B$에 놓여있고, 그 다음 N개 $C_1,...,C_N$개는 직선 $\ell_C$에 놓여있다. 이 때, $A_i$와 $B_j$의 중점이 $C_k$가 되는 $(i,j,k)$쌍의 개수를 구하는 것이 문제에서 요구하는 것이다. 중요한 사항은 같은 점들이 여러개 입력될 수 있다는 점과 각 점의 좌표는 정수이며 절댓값이 $10^5$이하 라는 것이다. 풀이 일단 $\ell_A, \ell_B$의 식을 구하는 것이 가능하니 수식으로 접근을 해보자. 직선의 방정식은 아래와 같이 놓을 수 있다. $$ \begin{a..
백준 5829번 Luxury River Cruise USACO 2013 Open Contest Silver 2번 문제이다. 문제 요약 정점이 N개 주어지고, N개의 정점은 각각 두 개의 간선을 갖는다. 정점의 각 간선은 Left와 Right로 나타내어진다. 길이 M의 Left 혹은 Right로 이루어진 순열이 주어지는데, 1번 정점에서 출발하여 M개의 순열을 K번 반복했을 때 도착하는 정점의 번호를 출력하는 것이 문제이다. 문제의 제한은 $ 1 \le N \le 1000, 1 \le M \le 500, 1 \le K \le 10^9$이다. 풀이 당연히 그래프를 만들고 $ MK $번 간선을 타고 지나가면 시간 초과다. 일단 이걸 줄여보자. 길이 $M$짜리 순열을 $K$번 타고 지나간 뒤의 결과를 찾는 것인데, 하나의 정점에서 간선을 $M$번 타고 가다가 그..