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

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

Delightful (Easy)

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

요약
삼진 컴퓨터에서 26개의 40트리트 레지스터를 사용해, 레지스터 X에 주어진 수의 가장 긴 비감소 접두사 길이를 계산하여 레지스터 Y에 남기는 100줄 이하의 프로그램을 작성한다.
난이도

어려움10점 중 10점

유형
구현, 시뮬레이션, 비트 연산, 그리디
정답자
아직 제출이 없습니다

문제

할머니의 지하실에서 이상한 상자를 발견했다. 자세히 살펴보니 이것은 구식 컴퓨터였다. 간단한 프로그램을 몇 개 실행해 봤지만 모두 매우 이상하게 동작했다. 한참이 지나서야 원인을 찾아냈다. 이 컴퓨터는 삼진 논리와 삼진 연산을 사용한다!

trit은 비트에 대응하는 삼진 자릿수다. 이 컴퓨터의 trit은 0, 1, 2를 저장할 수 있다. trit으로 논리 연산을 할 때는 0을 거짓, 1을 알 수 없음, 2를 참으로 본다.

컴퓨터에는 A부터 Z까지 이름 붙은 26개의 레지스터가 있다. 각 레지스터는 40-trit 부호 없는 정수를 담는 변수다.

어떤 수의 가장 긴 비감소 접두사의 길이인 ndp를 계산하는 프로그램을 작성하라. 예를 들어 000122012…3 형태의 수 x에 대해 ndp(x)=6인데, x의 처음 여섯 trit은 정렬된 순서이고 처음 일곱 trit은 그렇지 않기 때문이다.

형식적으로, x의 삼진 표현을 x39x38…x0이라 하자. ndp(x)를 x39 ≤ x38 ≤ ⋯ ≤ x39 − i + 1을 만족하는 가장 큰 i로 정의한다.

프로그램 실행이 시작될 때 레지스터 X에는 입력 수가 들어 있고 나머지 레지스터는 모두 0이다. 프로그램 실행이 끝났을 때 레지스터 Y에는 ndp(X) 값이 들어 있어야 하며, 나머지 레지스터는 어떤 값이든 상관없다.

프로그램은 최대 100개의 명령을 포함해야 한다.

입력

입력은 없다.

출력

출력 파일에는 위 조건을 만족하고 주어진 부분 문제를 해결하는 프로그램이 들어 있어야 한다.

빈 줄과 각 줄의 여분 공백은 무시하므로 프로그램을 사람이 읽기 좋게 정리하는 데 자유롭게 사용해도 된다. 비어 있지 않은 줄만 명령 개수 제한에 포함된다. 프로그램에서 두 토큰 사이에는 항상 공백이 최소 하나 있어야 하고, 두 명령 사이에는 항상 줄바꿈이 최소 하나 있어야 한다.

예제1

  1. 예제 1

    입력
    예상 출력
    A = X - 1
    B = ~ A
    C = B ^ X
    X = X & C