http://blog.daum.net/irepublic/7887584 가끔 보면 괴상한 주제 예를 들어 일본 만화영화에 대해 매니아적인 오타쿠적인 사람들이 있습니다. 그사람들이 모여서 이런 저런 정보를 모으는데 보통 사람들이 한번 들어보면 기가질릴정도입니다. 영화의 장면장면을 모두 이야기하고 감독과 성우등 여러가지에 대해 그야말로 모르는 것이 없습니다. 그 런데 여기에 누군가가 끼어들어 니가 오타쿠의 세계를 하느냐며 최고 오타쿠를 자기 맘대로 뽑고 감투도 씌워주고 계급도 만들고 그럽니다. 이럼 다 망하는 겁니다. 오타쿠 본래의 관심사는 사라지고 이젠 자기들을 선발해줄 선발기준이나 감투나 먹고 사는 문제가 주문제가 됩니다. 제일 나쁜 것은 오타쿠도 아닌 사람들이 그거 하면 돈 잘번다면서 끼어드는 겁니다. ..
모든 nlgn들의 영웅(?) 같은 priority_queue존재 그 자체로 멋지지만 정말 멋지게 쓰기 위해서는 제대로 활용할 줄 알아야 할 것이다. 1. Colored By Color Scripter™123456789101112131415161718#include #include using namespace std; priority_queue pq; int main(){ pq.push(3); pq.push(1); pq.push(4); pq.push(1); pq.push(5); pq.push(9); while (!pq.empty()) { printf("%d",pq.top()); pq.pop(); }}출력 결과는 954311 이다. 2.Colored By Color Scripter™12345678910111..
흔히 비트 DP (Bit DP)라고 하는 거 같다.문제를 읽는데 n이 15~20 정도 되는, 작지만 n!은 아닌 범위가 주어지면 십중팔구 얘. 시간복잡도도 십중팔구 2^n * n or 2^n * n^2. 멀쩡한 dp문제를 기하로 변환해서 푸는 Convex Hull Trick과 함께 가장 변태적인 dp 테크닉 중 하나라고 자부한다.(그래도 얘가 Convex Hull Trick보다는 나은듯...)각설하고. 보통 dp하면 항상 예제로 자주 나오는게 피보나치 함수를 최적화하는 것이다.f(n){if(n == 0) return 0;if(n == 1) return 1; if(memoized) return memo;else return f(n-1) + f(n-2);} 이러한 최적화를 적용시킬 수 있는 이유는 자명하다...
https://www.acmicpc.net/problem/8986 문제 한줄요약 : 를 최소로 하는 x를 구하시오. x를 이진탐색 할 수 있다면 N * lg1e9에 구할 수 있다.그래서 아무 생각없이 이진탐색한다음에 내면 accept 먹일 수 있는데그러라고 낸 문제가 아닐테니, 제대로 해보자. 좌표평면에 저걸 쫙 그려보면 x축과 a[i]/i에서 만나는 직선들이 수두룩하게 쌓여 있을 것이다.저 직선들의 합의 극소값이 하나만 있다는 걸 보이면 된다. 직선들을 싹 더해보자.-inf 어딘가에서 직선의 기울기는 -N(N-1)/2 일 것이다.그런데 첫번째 a[i]/i를 지나고, 두번째 a[i]/i를 지나면서... 점점 기울기가 증가할 것이다.+inf 어딘가에서 직선의 기울기는 N(N-1)/2로 변해있을 것이다.기울..
엄~청 짜기 쉽고 유용한 트리. 유니온 파인드 트리라고만 부르고 있었는데, 서로소 집합이라는 말이 더 나은거 같다. 기본적으로 루트가 하나 있고, 이 루트를 parent로 가지는 노드가 주렁주렁 달린 트리이다. 두가지 연산을 지원하는데, 1. p의 루트를 부르는 find(p) 2. p와 q를 같은 집합에 넣는 union(p,q) 아무 생각없이 짜면int parent[1000], size[1000]; void init(){ for (int i=0; i 4 -> 3 -> 2 -> 1 이런 식으로 트리가 달려있다 치자. 그러면 find(5)를 부르면 4번 정도를 거쳐서 1이 나올 것이다. 이럴 바에 그냥 parent[5] = 1로 압축을 해주면 한번에 갈텐데.. 그래서, find(p)를 부를 때 압축까지 해줄..
http://koistudy.net/?mid=prob_page&NO=521 알고리즘 문제해결 전략에 나온거랑 되게 비슷한 문제다. 그래서 베끼다시피해서 제출했다 문제에 사족이 참 많은데 요약하자면 모든 단어을 사용해서 끝말잇기를 하라 라는 내용이다. 단, 한 단어는 00 ~ 99 낱말 5개 로 구성되었으며, 출력시 사전순으로 가장 앞서는 것을 출력해야 한다. 단어를 꼭지점 (vertex)로 두고 생각하면 백트래킹을 해야 하기 때문에 500000개는 택도 없다. 거기다 지금 이 글의 주제가 한붓그리기이므로, 단어를 방향이 있는 모서리 (edge) 로 두고 한붓그리기를 하는 것이 좋겠다. 즉 단어가 0001020304 이런 식이라면, 00 -> 04로 가는 간선인 것이다. 그러면 V = 100, E 2 ->..
일부 dp문제에서 시간복잡도를 획기적으로 줄여주는 걸로 유명한 테크닉입니다. 이번에 koi 2014 전국본선 3번으로 나왔으니 인지도가 더 올라갈 거 같네요. 개략적으로 설명하자면 문제를 풀다가 이런 형태의 점화식이 나올 때는 보통 n^2 말고는 희망이 없는데 이걸 이런 식으로 해석하면 기울기와 절편이 j에 따라 결정되는 형태의 일차함수들로 해석할수 있게 됩니다.이러면 저러한 dp식을 구할때(dp[0] = 0) 1. 0번 선분을 넣는다 (기울기 = b[0]. 절편 = dp[0]) 2. 현재 들어간 선분 중 최솟값을 찾는다 (dp[1])3. 1번 선분을 넣는다 (기울기 = b[1]. 절편 = dp[1])4. 현재 들어간 선분 중 최솟값을 찾는다 (dp[2])...... 즉, * dp[i]를 구하고 * 선분..
(koistudy.net / acmicpc.net (Small / Large)) koistudy.net에 N0) 이때. 상태의 에너지는 그 상태가 가지는 값을 뜻합니다. 쉽게 말해 우리가 구하고자 하는 답이죠. 이 문제에서는 뒷면인 동전의 수가 상태의 에너지가 되겠습니다. 담금질 방법은 다음과 같이 작동합니다. (rand()는 0~1 사이의 임의의 난수입니다.) while ( k > 임계 온도 ){E1 = 현재 상태의 에너지 E2 = 랜덤하게 생성한 새로운 상태의 에너지p = exp((E1-E2)/(k*T));if(p > rand()) 현재 상태를 새로운 상태로 바꿈k *= 온도 감률 (보통 0.95 ~ 0.9999 정도) }과연 이런 식으로 해를 구하는 것이 왜 유효한지 case를 나눠서 살펴보도록 하..
뭐... 세 알고리즘 모두 최단 경로를 찾는 데 사용되는 알고리즘입니다.그래프 관련해서 상당히 유용한 알고리즘이기도 하고 실제로도 쓸 일이 굉장히 많은 알고리즘입니다. (아마) 편의상 말은 짧게 하겠습니다. 어느 온라인 저지를 가도 비슷한 문제가 몇개씩 있겠지만.. 나한텐 가장 익숙한 koistudy.net을 두고 설명하겠다. 문제는 뭐.. 1번 정점에서 n번 정점을 가는데 걸리는 최소 거리를 출력하는 거다. R&E가는길 (Tiny) (n shortest[i] + adj[i][j])3-1. 만약 빠르면. 최단 경로와 함께 parents 역시 갱신. }그런데, 방문하지 않은 점을 조금 더 빠르게 검색할 수 있다.힙을 쓰면 된다. 힙을 쓰면 가장 가까운 점 (최소값) 이 lgn 시간에 나온다. 짱짱 빠르다 ..
Home is where I want to be Pick me up and turn me around I feel numb, burn with a weak heart Guess I must be having fun The less we say about it the better Make it up as we go along Feet on the ground, head in the sky It's okay, I know nothing's wrong, nothing I got plenty of time You got light in your eyes And you're standing here beside me I love the passing of time Never for money, always for..
- Total
- Today
- Yesterday