본문 바로가기
반응형

전체 글82

[c++] 백준 내리갈굼 시리즈 with 세그먼트 트리 (190906) 내리 갈굼 https://www.acmicpc.net/problem/14267 내리 갈굼 2 https://www.acmicpc.net/problem/14268 내리 갈굼 3 https://www.acmicpc.net/problem/14287 내리 갈굼 4 https://www.acmicpc.net/problem/14288 세그먼트 트리 관련 문제이다. 1, 2는 세그먼트 트리를 곧바로 사용해도 되지만, 야자타임이 발생하는 3, 4번은 약간 응용 같은 느낌이다. 3번은 개별 update, 범위 find를 이용하면 된다. 4번은 개별 tree와 범위 tree 두 개를 동시에 쓰면 된다. 이 때 트리를 별도로 만들어야 한다. 왜냐하면 한 트리에서 야자타임했다가 안했다가 하면 구간합과 개별합이 엉망으로 합쳐지.. 2019. 10. 8.
[c++] 백준 #12920 평범한 배낭 (190903) 보자마자 knapsack 문제가 생각났다. 단순 DP 문제처럼 접근하려 했지만.. But.. 단, 집에 동일한 물건들이 여러개가 있을 수 있기 때문에 한 물건을 두개 이상 챙기는 것도 가능하다. 라는 조건 때문에 평범한 방법으로는 풀 수가 없다.(진짜로 n개씩 다 집어넣어보고 하면 시간초과가 날 것이다.) n이 100만, w는 1만이라서 애초에 dp[n][w]로 배열 선언도 못한다. 그래서, 좋은 아이디어는 1, 2, 4, 8, 16, 32, 64, 128, 256, 1000-511 이런 식으로 해서 묶음을 1000개에서 9개로 바꾸는 것이다. 10000개의 묶음이면 15~16개 정도가 되는 것이고, 많아봤자 물건이 1600개니까. #include using namespac.. 2019. 10. 8.
[c++] 백준 #11447 Colby’s Costly Collectibles (190903) x(1,0) y(1,1) z(-1,1)로 하고 신발끈 공식을 쓰면 된다. 신발끈 공식은 다각형의 넓이를 구하는 방법으로 다각형이 볼록이든 오목이든 가능하다. ** 문제를 풀 때 double을 쓰면 오차가 생기기 때문에 최대한 안쓰는 것이 좋다. #include using namespace std; #define INF 987654321 typedef long long ll; typedef pair ii; typedef tuple iii; #define pb push_back int abs(int a){ if (a>=0) return a; else return -a; } int main(){ ios::sync_with_stdio(false); cin.tie(0); int T;.. 2019. 10. 8.
[c++] 백준 #3176 LCA : 도로 네트워크 (190828) 자신의 i번째 부모를 저장하는 배열을 응용한 문제. 결국 I번째 부모까지 연결한 간선 중에 제일 minimum한 거, 제일 maximum한 거를 배열로 저장한 후 나중에 lca 구하고 d~lca까지 갈 때 minimum, maximum edge 계산, e~lca까지 갈 때 minimum, maximum edge를 계산하는 방식이다. 예전에 어려워서 못풀었는데 풀게 되어서 기쁘다. #include #include using namespace std; #define INF 987654321 typedef long long ll; typedef pair ii; typedef tuple iii; #define swap(a,b){int t=a; a=b; b=t;} #define N_.. 2019. 10. 8.
반응형