http://codeforces.com/contest/981
3시간 / 8문제 대회였습니다. ABC는 맞았으나 D에서 for문의 범위를 N까지 돌아야하는데 N-1까지 돈 것이 하나 있어서 System test에서 나갔습니다. A,B,C 모두 한 번에 맞췄습니다.
A - Antipalindrome
길이가 50밖에 안되니 그냥 모든 substring에 대해 계산을 해도 되고, 모든 글자가 같으면 0, 자기 자신이 palindrome이면 len-1, palindrome이 아니면 len입니다.
https://github.com/blisstoner/Codeforces/blob/master/Avito%20Code%20Challenge%202018/A.py
B - Businessmen Problems
마치 merge sort에서의 merge와 비슷하게 두 배열을 index 순으로 정렬해두고 추가해나가면 됩니다. 이외에도 map에 전부 넣어두고 동일한 원소가 들어오면 큰 값을 택하는 식으로 풀이할 수도 있습니다.
https://github.com/blisstoner/Codeforces/blob/master/Avito%20Code%20Challenge%202018/B.cpp
C - Useful Decomposition
문제가 이해가 안 가서 조금 당황했는데, 쉽게 생각해서 그래프가 불가사리 모양인지를 체크하는 문제입니다.(한 점으로부터 방사되는 형태) degree가 3 이상인 element가 2개 이상이면 No, 그렇지 않다면 degree가 가장 큰 element를 root로 잡으면 됩니다. 간단한 문제인데 빨리 캐치하지 못한 것이 너무 아쉽네요.
https://github.com/blisstoner/Codeforces/blob/master/Avito%20Code%20Challenge%202018/C.cpp
D - Bookshelves
APIO 2015년 1번 문항 (https://www.acmicpc.net/problem/10846)과 거의 동일한 문제입니다. 특정 value에 대해 $D[i][j][k]$를 $a[i] to a[j]$를 $k$개로 쪼개서 value를 만들 수 있으면 True, 불가능하면 False라고 정의해봅시다. 이 때 각 $D[i][j][k]$를 $O(j-i-k)$에 구할 수 있습니다. 이제 답의 MSB부터 LSB까지 value가 가능한지 확인합니다. 예를 들어 $2^{60}$이 가능하면 $2^{60}+2^{59}$가 가능한지 확인하고, $2^{60}+2^{59}$이 불가능하면 $2^{60}+2^{58}$이 가능한지 확인하고, $2^{60}+2^{58}$이 가능하면 $2^{60}+2^{58}+2^{57}$이 가능한지 확인하고.. 이런식으로 진행하면 $O(60N^3K)$에 구할 수 있습니다.
https://github.com/blisstoner/Codeforces/blob/master/Avito%20Code%20Challenge%202018/D.cpp
물론 주황에서 떨어질 것을 각오하고 쳤긴 했지만, D가 나간게 많이 아쉽네요 ㅠ_ㅠ
'알고리즘 > Codeforces' 카테고리의 다른 글
[Codeforces] Round #487 (Div. 2) (0) | 2018.06.12 |
---|---|
[Codeforces] Educational Codeforces Round 45 (0) | 2018.06.11 |
[Codeforces] Round #485 (Div. 1) (0) | 2018.05.30 |
[Codeforces] Round #484 (Div. 2) (0) | 2018.05.20 |
[Codeforces] Round #483 (Div. 1) (0) | 2018.05.17 |
[Codeforces] Round #482 (0) | 2018.05.17 |