티스토리 뷰

Codejam/2019

Practice Round 2019

makesource 2019. 12. 24. 10:10

1. Number thinking

 

문제요약:

Up and Down 을 Interactive 로 옮겨 놓은 문제이다.

 

풀이: 

숫자 범위를 L 이라고 할때, 항상 현재 범위의 중간을 확인하는 방식으로 [log2 (L)] + 1 번 만에 정답을 맞출 수 있다.

Interactive probolem 이기 때문에, 출력 시 buffer flush 를 해주지 않으면 TLE 로 판정된다.

 

2. Mural

 

문제요약:

길이 N 개의 벽이 있고, 각 벽에 해당되는 점수가 있다.

하루 마다 길이 1 에 해당되는 벽을 색칠 할 수 있고, 하루마다 좌우측 벽 중 색칠되지 않은 놈들중 하나가 무너진다. 

첫번째 날에는 아무 벽에서 색칠을 시작 할 수 있고, 시작한 이후에는 이미 색칠된 벽의 좌우만 칠 할 수 있다.

이러한 상황에서 얻을 수 있는 점수중 최대를 구하는 문제

 

풀이: 

문제를 잘 요약해보면, 연속된 구간으로만 색을 칠 할 수 있고,

매일 하나의 벽을 칠하고 하나의 벽이 무너지기 때문에 최대 칠할 수 있는 벽은 [(N+1)/2] 개 이다.

어느 곳에서든 시작할 수 있기 때문에 길이 [(N+1)/2] 구간중 합이 가장 큰 구간을 구하면 정답이 된다.

sliding window 방식을 통해 합을 구하면 길이 N 만에 합이 최대인 구간을 구할 수 있다.

 

3. Kickstart alarm

 

문제요약:

주어진 수식을 계산하면 된다

 

풀이:

정답이 되는 최종합을 Ai 를 기준으로 수식을 정리하다보면 각 계수의 특징이 관찰된다.

(power1 + power2 + .. powerk) 를 Ai 를 기준으로 정리하면

ans = a1 * A1 * N + a2 * A2 * (N-1) ... + an * An * 1 과 같은 꼴로 나타낼 수 있는데,

이때 ai 들을 관찰해보면 ai = ai-1 +  i^1 + i^2 ... i^k 과 같은 꼴로 나타낼 수 있다. (a1 = K)

 

i^1 + i^2 .. i^k 는 등비수열 합 공식에 의해 i * (i^k - 1) / (i-1) 으로 나타나고,

MOD 1000000007 에 대한 모든 i 에 대한 역원을 미리 구해두면 ai 값을 빠르게 계산 할 수 있다.

 

주의할 점:

1. 모듈러 연산에서 뺄샘이 들어가는 경우 무조건 MOD 만큼 더해준 다음 빼준다.

2. 각각의 모든 연산에서 MOD 연산을 해주어야 정확한 값이 계산된다. #define 으로 정의해두면 편하다

 

 

문제출저

https://codingcompetitions.withgoogle.com/kickstart/round/0000000000051060

 

Kick Start - Google’s Coding Competitions

Hone your coding skills with algorithmic puzzles meant for students and those new to coding competitions. Participate in one round or join them all.

codingcompetitions.withgoogle.com

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함