목록Codeforces (11)

이동식 저장소

706C. Hard problem

보통 제목은 반대인 경우가 많다. Problem - 706C - Codeforces codeforces.com 문자열을 사전 순으로 정렬하는 문제인데, 특이하게도 문자열의 순서를 바꿀 수 없다는 제한이 있다. 대신 문자열을 앞뒤로 뒤집는 연산만 가능하다. 또, 뒤집는 비용도 문자열마다 모두 다르다. 이제 문자열을 정렬하는 데 드는 최소 비용을 계산해 보자. 문제에서 사전 순서대로 정렬하라고 했으므로, 앞에서부터 오름차순으로 정렬해야 한다. cur번 문자열을 뒤집는 상태가 s일 때, cur부터 끝까지 정렬하는 데 드는 최소 비용을 dp(cur, s)라고 하자. cur번 문자열을 뒤집는다면 s=1이고, 뒤집지 않는다면 s=0이다. cur번 문자열에서 드는 비용을 $cur\_cos..

Problem Solving/Codeforces 2023. 4. 4. 21:20
455A. Boredom

코드포스에는 왜 이리 지루한 사람이 많은가? Problem - 455A - Codeforces codeforces.com 지문이 헷갈리기 쉽게 쓰여 있어서, 일단 문제를 정확히 이해하자. n개의 정수 a1, a2, , an이 있다. 임의의 ak를 골라 지우고, 모든 ak1ak+1을 지운다. 예를 들어 2를 하나 지웠다면 모든 13도 지워야 한다. 이때 얻을 수 있는 점수는 ak점이다. 수를 하나 지우면 양 옆의 수도 없어져서 골치아픈 문제이다. 만약 ak1만 지워지는 조건이었다면 골드 하위 수준의 문제였을 것이다. 그러나 아주 간단한 제한을 걸면 이 문제 역시 골드 하위급으로 만들어버릴 수 있다. 바로 수..

Problem Solving/Codeforces 2023. 4. 2. 09:46
327A. Flipping Game

Problem - 327A - Codeforces codeforces.com 0과 1로 이루어진 길이 N짜리 수열이 있다. 이 수열에서 연속된 구간 [i, j]를 단 한 번만 골라 구간 안에 있는 모든 0을 1로, 1을 0으로 뒤집는다. 뒤집은 후에 1은 최대 몇 개 있을 수 있을까? 이 문제는 제한이 매우 작아서 O(N3)에도 풀 수 있지만, N이 커지더라도 풀 수 있는 방법을 생각해 보자. Maximum Subarray 먼저 Maximum subarray라는 개념을 알아야 한다. Maximum subaray는 배열의 끝 칸에서 끝나는 부분합 중 최댓값을 구하는 알고리즘이다. 식으로 쓰면 ms[i][1, i] 구간에서 i를 포함하는 부분합 중 최댓값을 의미한다. 배열 ..

Problem Solving/Codeforces 2023. 3. 31. 17:45