10개의 댓글이 있습니다.
-
-
nocut98 -
보통은 미디엄-이지가 겹치는 편이고, 하드-이지가 겹치는 경우는 좀 드문 편입니다. 특히 이번에는 coding phase중에 푼 사람이 아무도 없을 정도로 좀 난이도가 있었던 편이라서(레드들은 연습방에서 잘들 푸시더군요 ㅎㅎ) 이해하기가 어렵더군요;;
뭔가 graph + dp를 적용한 거 같은데... ㅎㅎㅎ 그리고 2부리그에서 1등하고 에디토리얼 쓰는 경우도 별로 없고, 채널에서 물어볼려고 해도 다들 1부리그라 제가 모르는 문제니까 풀어보고 알려달라고 할 수도 없고 해서 좀 외롭습니다. ㅡ.ㅜ
제 개인적인 꿈은 2부리그 1등 먹고 알고스팟 분들한테 하카다 쏘는 거 정도? ㅋㅋㅋ
16년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
Being
상당히 많은 사람이 easy/med/hard를 모두 풀었습니다. 그레이가 순위권 찍은게 눈에 띄네요. 사실 Qualification Round 3 자체가 한번 unrated match가 되어서 그 매치 때 2, 3등을 기록했던 한국인 두 명만 초안습이 됐습니다. 그래도 저는 8등이라도 했지 .. 지못미 ㅠ_ㅠ
Easy (250 pts.)
Medium (500 pts.)
Hard (1000 pts.)
[spoiler="풀이 보기"]사람마다 아이디어를 표현하는 방식이 조금씩 다른 문제였습니다. 제 풀이를 설명하죠.
이런 류의 boolean(modular) matrix operation 을 풀 때 주로 사용하는 방법으로 연립일차합동식을 나열하는 것입니다. 만일 연립합동식을 나열했을때 가우스 소거법으로 풀릴 수 있는 형태의 문제라면 쌩큐죠. 이 문제에서도 나열해 봅시다.
r_k는 k번째 행의 1의 수가 현재 홀수개라면 1, 짝수개라면 0입니다. c_k도 열에 대해 비슷하게 정의합시다.
R_k는 k번째 행을 잡아서 반전시킬 것인지(1) 말 것인지(0)를 결정하는 변수입니다. C_k 역시 그렇구요.
편의상 행렬의 크기를 NxM으로 바꿉시다. 그렇다면 아래와 같이 식을 얻을 수 있습니다.
R_1 + C_1 + C_2 + .. + C_M + r_1 = 0 (mod 2)
R_2 + C_1 + C_2 + .. + C_M + r_2 = 0 (mod 2)
R_3 + C_1 + C_2 + .. + C_M + r_3 = 0 (mod 2)
...
R_N + C_1 + C_2 + .. + C_M + r_N = 0 (mod 2)
C_1 + R_1 + R_2 + .. + R_N + c_1 = 0 (mod 2)
C_2 + R_1 + R_2 + .. + R_N + c_2 = 0 (mod 2)
C_3 + R_1 + R_2 + .. + R_N + c_3 = 0 (mod 2)
...
C_M + R_1 + R_2 + .. + R_N + c_M = 0 (mod 2)
이 식들을 모두 만족해야 일단 가능한 솔루션이겠죠.
식을 가만히 보니 예쁜 모양의 common term이 있습니다. (C_1 + C_2 + ... + C_M)과 (R_1 .. R_N) 이죠.
앞의 식을 X라 합시다. X를 2로 나눈 나머지는 0 혹은 1일 것입니다. 즉, 열을 뒤집는 횟수는 당연히 짝수번 또는 홀수번 뒤집게 되겠죠.
그런데 열을 구체적으로 어떻게 뒤집을 것인지 모르더라도, 짝수번 뒤집을 것인지 홀수번 뒤집을 것인지만 결정하면 저 식에 대입해 보면 R_k꼴의 변수가 모조리 결정됩니다. 즉, 행을 뒤집을지 말지는 행의 1의 개수와 전체 열바꿈의 parity만 알면 되는 것이죠.
따라서 C_1 + C_2 + ... + C_M(을 2로 나눈 나머지)가 0 또는 1이므로, 0 또는 1이라고 일단 치고 R_k 변수들을 모두 구합니다. 그리고 나면 C_k 변수들도 같은 원리로 모두 구할 수 있습니다. 따라서 전체 가능한 방법은 최대 두 개 뿐입니다.
조금 더 생각해 보면, 불가능할 때의 -1 없이 항상 두 가지의 방법이 존재함을 알 수 있습니다.
[/spoiler]
16년 전