(코드 포스) 라운드 #811(디비전 3)

안녕하세요 aim_higher입니다.

Code Force Round #811(Div. 3) 코드 검토 및 해결.


모두가 잠을 사랑

https://codeforces.com/contest/1714/problem/A

  • 구현

H:M에서 Vlad라는 친구가 잠자리에 듭니다.

하지만 n개의 알람이 설정되어 있기 때문에 블라드의 알람이 울리는 순간 수면이 종료됩니다.

이 시점에서 Vlad가 얼마나 잘 수 있는지 인쇄할 수 있습니다.

이 시점에서 몇 가지 유의할 사항이 있습니다.

잠들기 전에 설정되어 있어서 듣지 못한 알람 시계

요점은 다음날 같은 시간에 울리는 것입니다.


알람의 시간과 분은 {h*60+m} 형식으로 입력되며,

위에서 설명한 것처럼 취침 시간 전에 설정한 알람은 24시간으로 보완됩니다.

수신된 입력 값은 가장 작은 값을 얻기 위해 오름차순으로 정렬됩니다.

그러면 “가장 작은 값 – 수면 시간”이 정답이 됩니다.

물론 임의로 시간을 환산해서 ‘계산’을 진행했기 때문이다.

m이 60보다 크면 h로 변환됩니다.

그래서 정답을 쉽게 출력할 수 있습니다.


비. 접두어 제거

https://codeforces.com/contest/1714/problem/B

  • 적은

Polycarp는 길이가 n인 정수 n개의 순열을 가집니다.

각 요소의 인덱스가 i이고 시퀀스의 각 요소가 ai인 경우

i를 영역으로, ai를 영역으로 본다면 폴리캅은 일대일 기능이 이뤄졌을 때만 행복하다고 한다.

즉, 해당 인덱스에 해당하는 요소 값 ai는 다른 인덱스 값에 대해 동일하지 않아야 합니다.

위와 같이 Polycarp이 행복한 시퀀스를 만들려면

시퀀스의 가장 왼쪽 요소를 제거하는 작업을 진행할 수 있습니다.

마지막으로 Polycarp를 행복하게 만드는 데 필요한 최소한의 작업이 몇 번인지 출력하십시오.


이 문제는 왼쪽 삭제 과정이므로 왼쪽에 집중하지 마시고 실제로 삭제를 시도하셔야 합니다.

보이면 오른쪽부터 반복하며 항목을 외우고 중복된 숫자가 있는 지점에서 멈춘다.

예제 1을 예로 사용

(3 1 4 3)에서 오른쪽에서 가로질러 봅시다.

3 (3:1)

4 (3:1 / 4:1)

1 (1:1 / 3:1 / 4:1)

3 (3:2??) → 정지

이 접근 방식은 결국 왼쪽에서 제거되는 결과를 낳습니다.

그렇다면 답은 쉽습니다.

C++ 맵을 사용했습니다.


다양한 최소 수

https://codeforces.com/contest/1714/problem/C

  • 적은

1부터 45까지의 숫자를 던집니다.

(1부터 9까지의 합이 45이니 바로 느껴지시죠?)

1부터 9까지 서로 다른 숫자를 중복 없이 추출하고 병합하여 특정 숫자를 만들 수 있습니다.

이 시점에서 필요한 최소 자릿수가 출력되어야 합니다.


솔직히 이 문제는 문제 A만큼 너무 쉽습니다.

9에서 1로 이동하고 가능한 한 많이 사용하십시오.

사용한 숫자의 갯수를 더해서 출력하면 답은 (…)


D. 발생 색상

https://codeforces.com/contest/1714/problem/D

  • 적은

바로 로직을 작성했는데 구현이 너무 협소합니다.

나는하지 않을거야