G++ 언어
시간 제한0.1초메모리 제한256 MB
H와 W를 읽고 입력으로 주어지는 사각형 (a, b)에서 (c, d)까지의 합 S를 메모리 0에 남기고 나머지 메모리를 모두 0으로 만드는 G++ 코드를 작성합니다.
문제
세계 최고의 천재 교준이는 몇 년간의 연구 끝에 새로운 프로그래밍 언어 G++를 만들었다! G++는 다음과 같은 연산을 지원한다:
- "INPUT ": 입력에서 정수 하나를 읽어 번 메모리에 쓴다. 더 이상 읽을 정수가 없으면 Input Error가 발생한다.
- "NOT ": 번 메모리에 쓰인 값의 논리적 부정을 번 메모리에 쓴다.
- "BNOT ": 번 메모리에 쓰인 값의 비트 NOT을 번 메모리에 쓴다.
- "AND … ": … 번 메모리에 쓰인 개의 값을 비트 AND한 결과를 번 메모리에 쓴다. , …, 은 모두 달라야 하며, 여야 한다. 이를 만족하지 않으면 Index Error가 발생한다.
- "OR … ": … 번 메모리에 쓰인 개의 값을 비트 OR한 결과를 번 메모리에 쓴다. , …, 은 모두 달라야 하며, 여야 한다. 이를 만족하지 않으면 Index Error가 발생한다.
- "XOR … ": … 번 메모리에 쓰인 개의 값을 비트 XOR한 결과를 번 메모리에 쓴다. , …, 은 모두 달라야 하며, 여야 한다. 이를 만족하지 않으면 Index Error가 발생한다.
- "LSHIFT ": 번 메모리에 쓰인 값을 번 메모리에 쓰인 값만큼 비트 왼쪽 시프트한 결과를 번 메모리에 쓴다.
- "RSHIFT ": 번 메모리에 쓰인 값을 번 메모리에 쓰인 값만큼 비트 오른쪽 시프트한 결과를 번 메모리에 쓴다.
G++ 코드는 가장 첫 번째 연산부터 순서대로 실행된다. 실행 즉시 int형 변수 개를 담을 메모리가 할당된다. 코드가 번 메모리에 접근한다면 이어야 하며, 그렇지 않으면 Memory Error가 발생한다. 실행 초기에 개의 변수는 모두 으로 초기화되어 있다.
G++ 코드의 총 연산 횟수는 을 넘지 않아야 한다. 넘으면 Time Limit Exceeded Error가 발생한다.
G++ 코드의 총 메모리 접근 횟수는 을 넘지 않아야 한다. 넘으면 Access Limit Exceeded Error가 발생한다.
교준이는 완벽주의자다. 따라서 G++ 코드에는 불필요한 공백이나 개행이 있으면 안 된다. 또한 G++ 코드의 마지막 문자는 개행 문자여야 한다. 그렇지 않으면 Compile Error가 발생한다.
더불어 G++ 코드가 Undefined Behavior를 일으키려 하면 Runtime Error가 발생한다. G++ 코드를 실행할 때 Undefined Behavior가 발생하는 경우는 다음과 같다:
- 를 만큼 비트 왼쪽 시프트할 때, 과 을 모두 만족해야 한다. 또한 이면 이어야 한다. 그렇지 않으면 Undefined Behavior가 발생한다.
- 를 만큼 비트 오른쪽 시프트할 때, 을 만족하지 않으면 Undefined Behavior가 발생한다.
입력이 "2 16 5"일 때 다음과 같은 G++ 코드를 실행하면 4번 메모리에 쓰인 값은 5다.
INPUT 2
NOT 2 3
NOT 3 2
INPUT 0
INPUT 0
XOR 3 0 1 2 1
OR 3 3 1 2 4
이제 다음 문제를 G++로 풀어야 한다:
가로 칸, 세로 칸인 크기 의 이차원 격자판이 있다. 격자판의 가장 왼쪽 윗칸의 좌표는 , 가장 오른쪽 아랫칸의 좌표는 이다. 좌표 인 칸에는 수 가 적혀 있다.
격자판에서 왼쪽 위의 좌표가 , 오른쪽 아래의 좌표가 인 직사각형을 생각하자. 이 직사각형에 포함된 칸에 적힌 수의 합을 라 하자. 여러분은 다음과 같은 입력에 대하여, 실행 후 0번 메모리에 쓰인 값이 이고 이를 제외한 나머지 메모리에 쓰인 값이 전부 이 되도록 하는 G++ 코드를 작성해야 한다.
G++ 프로그램에 제공되는 입력은 다음과 같다:
…
입력
여러분에게는 오직 두 정수 , 가 주어진다. 즉, 여러분이 제출하는 코드는 와 의 값만 읽어들일 수 있다. , …, , , , , 의 값은 제공되지 않음에 유의하라.
출력
실행 후 0번 메모리에는 가, 그 밖의 모든 메모리에는 이 적혀 있어야 한다. G++ 코드를 출력하라.
제한
모든 데이터는 다음 조건을 만족한다:
- , , , …, 는 모두 자연수다.
- .
- 를 만족하는 모든 정수 에 대하여, .
- , , , 는 모두 정수다.
- , .