아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

프로토콜

면접 대비

시간 제한3초메모리 제한128 MB

요약
k개 전압 심볼로 이루어진 길이 m의 문자열 중 같은 심볼이 l번 연속되지 않는 것의 개수를 세고, (n/m) * log2(개수)의 내림값을 출력한다.
난이도

보통10점 중 5점

유형
동적 계획법, 조합론, 수학, 구현
정답자
아직 제출이 없습니다

문제

한 통신 회사가 새로운 케이블로 두 컴퓨터 사이에서 데이터를 전송하는 프로토콜을 설계하고 있다. 이 케이블은 kk가지 서로 다른 전압 레벨의 신호를 보낼 수 있지만, 전압은 1/n1/n초마다 한 번씩만 바뀔 수 있다. 전압이 일정하게 유지되는 이 1/n1/n초 구간 하나를 임펄스(impulse)라고 부른다.

데이터는 연속한 mm개의 임펄스로 이루어진 패킷 단위로 전송되므로, 패킷 하나를 보내는 데 m/nm/n초가 걸린다.

기술적인 이유로 한 패킷 안에서 전압이 너무 오래 그대로 유지되면 안 된다. 즉, 한 패킷은 같은 전압 레벨의 임펄스가 연속으로 ll개 나타나는 부분을 포함할 수 없다.

어떤 프로토콜로 서로 다른 패킷을 xx가지 보낼 수 있다면, 패킷 하나에 log⁡2x\log_2 x 비트의 정보를 담을 수 있다. 이때 1초 동안 최대 몇 비트의 정보를 보낼 수 있는지 구하는 것이 목표다.

예를 들어 케이블이 22가지 전압 레벨(k=2k = 2)을 제공하고 이를 00과 11로 나타내며, 전압이 1초에 2020번 바뀌고(n=20n = 20), 각 패킷이 44개의 임펄스로 이루어지며(m=4m = 4), 같은 레벨이 연속으로 33개 나오면 안 된다(l=3l = 3)고 하자. 그러면 00000000, 00010001, 10001000, 11111111, 11101110, 01110111 패킷은 보낼 수 없고, 00100010, 00110011, 01000100, 01100110, 01010101, 11011101, 11001100, 10111011, 10011001, 10101010 패킷은 보낼 수 있다. 서로 다른 패킷이 1010가지이므로 패킷 하나에 log⁡210\log_2 10 비트를 담을 수 있다. 1초 동안 20/4=520/4 = 5개의 패킷을 보내므로 5⋅log⁡210≈16.60965 \cdot \log_2 10 \approx 16.6096 비트의 정보를 보낼 수 있다.

프로토콜을 나타내는 정수 kk, nn, mm, ll을 읽어 1초 동안 보낼 수 있는 정보의 최대 비트 수를 구하고, 그 값을 소수점 아래로 버림한 정수를 출력하는 프로그램을 작성하라.

입력

첫째 줄에 네 개의 정수가 공백 하나로 구분되어 주어진다.

  • 전압 레벨의 수 kk (2≤k≤102 \le k \le 10),
  • 임펄스의 주파수 nn (1≤n≤10001 \le n \le 1000),
  • 패킷의 크기 mm (1≤m≤1001 \le m \le 100),
  • 금지되는 연속 길이 ll (2≤l≤m2 \le l \le m): 한 패킷은 같은 전압 레벨의 임펄스가 연속으로 ll개 나오는 부분을 포함할 수 없다.

n/mn/m은 1010 이하의 정수임이 보장된다.

출력

1초 동안 보낼 수 있는 정보의 최대 비트 수를 소수점 아래로 버림한 정수 하나를 첫째 줄에 출력한다.

예제1

  1. 예제 1

    입력
    2 20 4 3
    
    예상 출력
    16