[Codeforces] Round #475 (Div. 2)

오랜만에 5문제짜리 라운드를 한 것 같네요. C를 굉장히 늦게 맞추고, 더군다나 4번 틀리기까지 했습니다.

 

A - Splits

 

맨 처음에는 답이 잘 유추가 안되어서 굉장히 애먹었습니다. 그런데 생각해보니 그냥 2와 1로만 수열을 만든다고 생각하면 굉장히 자명한 문제였습니다. 그냥 주어진 N에 대해 N/2 + 1을 출력하면 됩니다.

 

https://github.com/blisstoner/Codeforces/blob/master/Round%20475%20Div.2/A.cpp

 

B - Messages

 

설명을 이해하고 나면 그냥 C < B일 때 메시지를 받은 즉시 읽고, C >= B일 때 메시지를 t초에 읽는 것이 나음을 알 수 있습니다.

 

https://github.com/blisstoner/Codeforces/blob/master/Round%20475%20Div.2/B.cpp

 

C - Alternating Sum

 

항이 최대 $10^9$이기 때문에 정직하게 더해나가는 방식으로는 시간 내에 풀 수 없습니다. 대신 modulus의 성질과 기타 다양한 방식을 통해 수식을 간략화할 수 있는데,

우선 $a*b^{-1} = x$, $a^n = t,$ $n+1 = qk$라고 두고 나면 식을 예쁘게 정리할 수 있습니다. 단 $x^k-1$이 0과 합동일 때의 처리는 별도로 해주어야 합니다.

 

$k=1$이면 $1+x^k+x^2k+..$ 부분의 계산에 최대 $O(N)$이 필요하고, 이 부분을 맨 처음에 $(x^{qk}-1)/(x^k-1)$로 처리하지 않아 TLE를 여러 번 받았습니다. 맨 처음에는 제가 만든 pow 함수에서 문제가 생겨 TLE가 뜨는 줄 알았다가 대략 끝나기 20분 전 쯤에 $k$가 작을 때 연산량이 많을 수 있음을 알아차렸습니다.

 

https://github.com/blisstoner/Codeforces/blob/master/Round%20475%20Div.2/C.cpp

 

그나마 C를 풀어내어 레이팅이 심각하게 깎이지는 않았지만 뭔가 조금 정체된 느낌입니다. 계속 열심히 하는 방법밖엔 없을 것 같네요.

 

 

'알고리즘 > Codeforces' 카테고리의 다른 글

[Codeforces] Round #482  (0) 2018.05.17
[Codeforces] Round #477  (0) 2018.05.15
[Codeforces] Round #476  (0) 2018.05.15
[Codeforces] Educational Codeforces Round 42  (0) 2018.04.21
[Codeforces] Round #474 (Div.1 + Div.2)  (0) 2018.04.08
[Codeforces] Educational Codeforces Round 38  (0) 2018.02.18
  Comments