본문 바로가기

알고리즘/백준 & swacademy108

BOJ 2336 - 굉장한 학생 (세그트리, 수학, 기하) https://www.acmicpc.net/problem/2336 바로 이전에 풀었던 유형과 유사 n명의 학생이 동점자 없는 시험을 세번 치른다. i번 학생의 1,2,3차 시험 등수 < j번 학생의 1,2,3차 시험 등수일 경우 i번 학생은 j번학생보다 대단하다. 본인보다 대단한 학생이 없는 경우 그 학생은 굉장한 학생이라고 할 때, 굉장한 학생의 수를 구하라 (입력에서 1번 인덱스에 오는 숫자 i는 i번 학생이 1등했다는 의미) 각 학생마다 1,2,3차 등수를 tuple ran[MAX]에 저장한다. ex) ran[3] = {x,y,z} : 3번학생이 1차시험 x등 2차시험 y등 3차시험 z등했음. 1차시험의 등수를 기준으로 ran을 정렬한 후에, y와 z만 가지고 비교해 주면 된다. 아래 그림을 구현하.. 2020. 4. 22.
BOJ 18879 - The moo particle (기하, 수학) https://www.acmicpc.net/problem/18879 좌표평면 없이 푸는 머리좋은 사람들도 있을 것 같음 n개의 요소가 주어진다. 각각의 요소는 x,y값으로 표현된다. (n x[i] >> y[i]; id[i] = i; } sort(id, id + n, [](int i1, int i2) { if (x[i1] == x[i2]) return y[i1] > y[i2]; else return x[i1] = 0; i--) { cy = y[id[i]]; mxy[i] = max(mxy[i + 1], cy); } mnx[n - 1] = x[id[n - 1]]; for (int i = n - .. 2020. 4. 17.
BOJ 18263 - Milk visits(오프라인 쿼리, lca) https://www.acmicpc.net/problem/18263 솔루션 참고. 오프라인 쿼리 중 처음 보는 접근. 온라인 쿼리로 풀 수는 있다고 하지만 떠오르지 않는다 트리가 주어지고, 각 정점마다 type이 주어진다. (정점, type 모두 최대 1e5) 최대 1e5개의 쿼리가 들어온다. u, v, t : u~v 경로상에 type t가 존재하는가? 트리의 루트부터 차례로 순회하면서, 현재 정점이 u일때, u가 끝점인 쿼리들을 처리해 줄 것. dat[i][0], dat[i][1] : i번째 쿼리의 첫번째 끝점, 두번째 끝점 vector todo[u] : u가 끝점인 쿼리들의 인덱스. w = lca(u,v)라고 할 때, 다음 그림의 색칠한 부분에 쿼리에서 물어본 타입이 있는지 처리해주면 된다. dfs를.. 2020. 4. 1.
BOJ 11813 - GALAKSIJA (disjoint set, tree, 오프라인쿼리) https://www.acmicpc.net/problem/11813 http://blog.naver.com/nywoo19/221436385751 위 블로그 참고했습니다. 가중치있는 트리가 주어진다. 간선을 주어진 순서대로 자를 것. 자르고 난 후 원하는 값을 그때 그때 출력하는 문제. 원하는 값: 전체 경로에서 경로에포함된 모든 간선의 가중치의 xor값이 0인 경우의 수 트리를 자른다 -> 거꾸로 간선을 이어붙이는 편이 훨씬 쉽다. 1. a ^ b == 0 a == b 2. xor(u,v) : xor(1,u) ^ xor(1,v)임을 이용해야 한다. map mp[MAX]에서 mp[u] = {x, cnt} : 대표값이 u인 set에 포함된 v 중 xor(1,v)값이 x인 것의 개수 cnt 간선 (u,v)를 .. 2020. 3. 18.