일단 레이팅 변화만 올려둡니다. 언제나처럼 Top 9 [?] 과 상위 150등 안에 든 한국인들만 잘랐습니다.

(그림판이 맛이 가서 우울하네요)

srm375div1.png

P.S) lewha0님이 Red가 되셨습니다 축하해여 +_+



Easy (250 pts.)

* 문제 설명

  어떤 자연수 n이 주어졌다. n을 prefix로 하는 "0이 아닌 n의 각 자리수"로 나누었을 때의 나머지가 모두 0인
자연수 중 최소값을 구하여라.



 
Medium (500 pts.)

* 문제 설명

  당신은 날짜를 입력하는 작업을 하고 있다. 하지만 어제 밤에 술을 너무 많이 마셨기 때문인지 오타가 종종 발생하기도 한다. 그래도 그나마 다행인 사실은, 아무리 술에 취해 있다고는 하지만, 키보드를 누른 횟수는 절대로 틀리지 않는다. 아래에 키보드 그림을 보자.

keyboard.gif

  위의 그림에서 빨간색 Edge는 1만큼 떨어져 있음을 의미하고, 녹색 Edge는 3만큼 떨어져 있음을 의미한다.

  우리는 이제 penalty를 정의할 수 있다. 만약 올바른 키를 입력하였다면 penalty가 0이다. 하지만 오타가 발생하였을 경우에는 "두 key 사이의 거리" 만큼의 penalty를 받게 된다.
  input string과 correct date가 같은 길이라면, 두 string사이의 penalty의 합을 구할 수 있다. 이를 Distance 라고 하자.

  input string이 주어졌을 때, Distance를 최소로 하는 correct date를 구하시오. 만약 답이 여러 개 있을 경우, 제일 이른 날짜를 출력한다. 그리고 이 문제의 달력은 윤년을 기준으로 하기 때문에 2월 29일도 valid date로 본다.





Hard (1000 pts.)

* 문제 설명

  1000000x1000000크기의 체스판에 Duke가 한 마리 있다. duke는 위, 아래, 왼쪽, 오른쪽으로 한 칸 씩만 움직일 수 있다.

  각 좌표는 "(<Column number>, <Row number>)" 꼴로 표현한다. <Column number>, <Row number>는 6자리 숫자로, 예를 들어 (499999, 000000)과 (500000, 000000)은 제일 아래 라인의 가운데에 있는 두 cell의 좌표를 의미한다.

  duke의 path는 duke가 방문했던 cell 좌표들의 space로 구분 된 list로 표현할 수 있다. 예를 들어 "(444444, 600000) (444445, 600000) (444445, 599999)"  같은 경우에는 (444444, 600000)에 있던 duke가 오른쪽으로 한 번, 아래 쪽으로 한 번 이동했을 때의 path이다. path중 에서  같은 좌표를 두 번 이상 지나지 않는 path를 simple하다고 정의한다. 

  duke가 처음에 initPosition 에 있다고 가정했을 때, lexicographically greatest simple path를 구할 수 있다. 이 path에서 제일 마지막 cell의 좌표를 return하는 프로그램을 작성하시오. duke는 더 이상 움직일 수 없을때까지 이동한다.