본문 바로가기

알고리즘225

BOJ 20176 - Needle (FFT) www.acmicpc.net/problem/20176 참고 koosaga.com/263 세 수열 $a,b,c$ 가 주어질 때, $ a_i+c_j=2 * b_k $ 를 만족하는 쌍 $ (i,j,k) $의 개수를 세는 것 x좌표의 범위를 0-60000으로 두고 답을 구하는 식을 만들면 다음과 같다. \[\sum_{x = 0}^{60000} count_b[x] \times \sum_{y = 0}^{2x} (count_a[y] \times count_c[2x-y])\] fft를 이용해서 합성곱을 구할 수 있다. \[conv[i] = \sum_{x = 0}^{i} (count_a[x] \times count_c[i - x])\] 다시 식을 정리하면.. \[\sum_{x = 0}^{60000} (count_b[x].. 2021. 1. 2.
고속 푸리에 변환 (FFT) blog.myungwoo.kr/54 비재귀적으로 구현하신 페이지. 많은 분들이 이 코드를 사용하시는 듯 함 합성 곱을 $O(nlogn)$ 에 구할 수 있다. 자세한 설명은 다른 블로그.. #define _USE_MATH_DEFINES #include #include #include using namespace std; #define sz(v) ((int)(v).size()) #define all(v) (v).begin(),(v).end() typedef complex base; void fft(vector & a, bool invert) { int n = sz(a); for (int i = 1, j = 0; i > 1; for (; j >= bit; bit >.. 2021. 1. 2.
BOJ 17978 - Washer (기하, 수학) www.acmicpc.net/problem/17978 평면의 법선벡터를 활용해야하는 풀어볼만한 기하문제 3차원 공간(r,g,b축)에 최대 100개의 점이 주어진다. 그 어떤 세 점도 한 직선 위에 있지 않고, 그 어떤 네 점도 한 평면 위에 있지 않다. 이 때, 점을 2분할 하는데, 분할방법에 따라서 점수가 달라진다. 최소 점수를 구해라 (접근 1) 중복되는 점이 없는 1차원 공간을 나눈다면 어떤 점을 기준으로 A,B 그룹을 나눈 후에 추가로 기준이 되는 점을 A, B그룹에 넣을 때를 비교하는 방법이 가장 빠르다. (접근 2) 어느 세 점도 같은 직선 위에 있지 않은 2차원 공간을 나눈다면, 어떤 두 점을 기준으로 A,B 그룹을 나눈 후에 추가로 기준이 되는 두 점을 A,B 그룹에 넣을 때를 비교하는 방.. 2020. 12. 5.
최대 유량 - 디닉 jason9319.tistory.com/150 blog.naver.com/kks227/220808685331 위 두 블로그에서 공부했습니다. 특히 코드는 jason님의 코드를 많이 참고했습니다. $O(V^2E)$ 1. bfs로 각 정점마다 소스로부터 얼마나 떨어져있는지 의미하는 level 배열을 초기화 해준다. 싱크에 도달할 수 있다면 2. 소스-싱크 경로상 차단 유량을 구해준다. dfs에 지금까지 최소 유량을 같이 보내주고 반환값을 이후 최소 유량으로 설정하면 쉽게 구할 수 있다. 차단 유량이 0보다 크다면 반복한다. dfs할 때 역방향 간선 때문에 한 정점을 여러번 접근할 수 있다. work배열로 정점 u를 여러 번 접근하더라도 dfs 진행에 있어서 다음 정점 v를 중복해서 접근하지 않도록 한다. w.. 2020. 10. 9.