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

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

상수를 위한 언어

면접 대비

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

요약
0이 아닌 정수 C마다 C+1 또는 C-1로 시작해 INCR과 DBL만으로 C를 만드는 가장 짧은 프로그램을 출력하고, 길이가 같으면 DBL을 T, INCR을 2T로 두어 실행 시간이 가장 짧은 것을 고른다.
난이도

보통10점 중 6점

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

문제

한 컴퓨터공학 교수가 YACL("Yet Another Constant Language")이라는 새로운 프로그래밍 언어를 개발하고 있다. 이 언어는 매우 단순해서 다음 네 개의 명령어만 가진다.

  • C+1 — 상수 11을 만든다.
  • C-1 — 상수 −1-1을 만든다.
  • INCR — 현재 만들고 있는 상수에 11을 더한다.
  • DBL — 현재 만들고 있는 상수에 22를 곱한다.

프로그램은 이 명령어들을 한 줄에 하나씩 나열한 것이며, 위에서 아래로 순서대로 실행된다. 프로그램을 작고 빠르게 유지하기 위해 다음 규칙을 지켜야 한다.

  • 모든 프로그램은 반드시 C+1 또는 C-1로 시작해야 한다.
  • 주어진 상수 CC는 가능한 한 적은 수의 명령어로 만들어야 한다.
  • 같은 (최소) 명령어 수로 CC를 만드는 프로그램이 여러 개라면, 그중 가장 빠른 것을 사용해야 한다. 실행 시간은 DBL이 TT 나노초, INCR이 2T2T 나노초 걸린다고 가정한다.

주어지는 각 상수에 대해, 위의 모든 규칙을 만족하면서 그 상수를 만드는 프로그램을 출력하여라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 만들어야 할 00이 아닌 정수 상수 하나가 적힌 한 줄이며, −32768≤C≤32767-32768 \le C \le 32767을 만족한다. 정수 00 하나만 있는 줄은 입력의 끝을 나타내며 처리하지 않는다.

출력

각 테스트 케이스마다 먼저 Constant n 한 줄을 출력한다. 여기서 n은 해당 상수이다. 그다음 그 상수를 만드는 가장 효율적인 프로그램을 한 줄에 명령어 하나씩 출력한다. 연속한 두 테스트 케이스 사이에는 빈 줄을 하나 출력한다.

예제1

  1. 예제 1

    입력
    3
    -5
    1
    7
    0
    
    예상 출력
    Constant 3
    C+1
    DBL
    INCR
    
    Constant -5
    C-1
    DBL
    DBL
    INCR
    DBL
    INCR
    
    Constant 1
    C+1
    
    Constant 7
    C+1
    DBL
    INCR
    DBL
    INCR