알고리즘 15

2021년 3분기

프래머스 - 다단계 칫솔 판매 더보기 #include #include #include using namespace std; constexpr int PRICE = 100; vector solution(vector enroll, vector referral, vector seller, vector amount) { vector answer; answer.resize(enroll.size(), 0); unordered_map IDs; int ID = 0; for(auto en : enroll) IDs[en] = ID++; vector parents(enroll.size()); //추천인을 다단계 tree상의 부모로 간주 for(int i=0;i> m; BufferedFenwickTree bft(n,m); f..

2021년 2분기

백준 9248 - Suffix Array (문자열 - 맨버 마이어스 알고리즘) 더보기 #include #include #include #include //https://www.acmicpc.net/problem/9248 - Suffix Array //종만북보고 재현함 using namespace std; //#define DEBUG #ifdef DEBUG void DebugSuffixArr(const vector & suffixArr, const string & s, int t = -1) { cout 음의 사이클 없음으로 최단경로 완성 return TryRelaxEdges();// 간선 완화를 다 했는데 또 완화가 된다 => 음의 사이클이 있다. } bool TryRelaxEdges() { int rel..

2차원에서 방향 판단하기 (CCW)

문제 위와 같이 2차원 평면에 벡터 $\overrightarrow{AB}$가 있다. 점 C는 왼쪽방향 혹은 반시계방향(CCW)이고 점 D는 오른쪽방향 혹은 시계방향(CW)라고 할 수 있다. 이때 점C와 점D가 CW인지 CCW인지를 어떻게 판별할 수 있을까? 벡터의 외적으로 알아내기 두 3차원 벡터 $\overrightarrow{a}$와 $\overrightarrow{b}$가 있다. 이때 두 벡터의 외적은 다음과 같이 정의할 수 있다. $\overrightarrow{a}\times\overrightarrow{b} = \hat{n}\vert\overrightarrow{a}\vert \vert\overrightarrow{b}\vert\sin\theta$ $\theta$는 두 벡터의 각도이며 $\hat{n}$은..

알고리즘/일반 2021.09.12