http://codeforces.com/contest/986
A,B는 적당히 쉽고 C,D,E,F가 헬이어서 A, B만 신속하게 풀어냈어도 100~200위 권을 할 수 있었습니다. 그런데 시험을 치룰 때 무슨 생각이었는지 A를 굉장히 이상하게 풀어서 System test에서 나갔습니다. B도 실수로 2번 틀리고 Accepted 됐습니다.
A - Fair
D[i][j]를 i번째 점에서 j번째 굿즈를 가질 수 있는 최소 비용이라고 하면, D[i][A[i]] = 0임은 자명합니다. 이제 (1, a1), (2, a2), .. , (N,aN)으로부터 시작해 BFS를 돌리면 O((N+M)*K)로 해결할 수 있습니다.
https://github.com/blisstoner/Codeforces/blob/master/Round%20485%20Div.%201/A.cpp
B - Petr and Permutations
Graph Theory의 permutation, cycle 부분을 이해하고 있어야 풀 수 있습니다. Permutation을 길이 2짜리 cycle의 곱으로 나타낼 수 있고, 이 때 길이 2짜리 cycle의 갯수의 홀짝성은 늘 유지가 됩니다. 그렇기에 주어진 permutation을 만들기 위해 필요한 2-cycle의 갯수를 우선 inversion 혹은 cycle decomposition으로 구한 후 그것을 2로 나눈 나머지와 N을 2로 나눈 나머지를 비교하면 됩니다. N을 2로 나눈 나머지와 비교하지 않고 그냥 1 혹은 0과 비교해서 1번 틀리고 또 UM_mik로 출력해서 1번 틀렸네요.
https://github.com/blisstoner/Codeforces/blob/master/Round%20485%20Div.%201/B.cpp
A번을 완전 이상하게 떠올린게 좀 많이 아쉽네요. 학기 중이라 알고리즘에만 전념할 수가 없는 것도 많이 아쉽습니다.
'알고리즘 > Codeforces' 카테고리의 다른 글
[Codeforces] Round #488 (Div. 1) (0) | 2018.06.20 |
---|---|
[Codeforces] Round #487 (Div. 2) (0) | 2018.06.12 |
[Codeforces] Educational Codeforces Round 45 (0) | 2018.06.11 |
[Codeforces] Avito Code Challenge 2018 (0) | 2018.05.28 |
[Codeforces] Round #484 (Div. 2) (0) | 2018.05.20 |
[Codeforces] Round #483 (Div. 1) (0) | 2018.05.17 |