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

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

게임 쇼 수식

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

요약
주어진 수 사이에 +, -, *, /를 순서대로 넣어 왼쪽부터 계산한 값이 목표에 도달하게 만들고, 가장 사전순으로 앞선 식이나 NO EXPRESSION을 출력한다.
난이도

보통10점 중 6점

유형
DFS, 백트래킹, 구현
정답자
아직 제출이 없습니다

문제

어느 텔레비전 게임 쇼에는 참가자에게 양의 정수 수열과 목표 정수 하나를 주는 코너가 있습니다. 참가자는 수열의 모든 수를 정확히 한 번씩 사용하여, 연산자 +, -, *, / 로 이어 붙인 하나의 수식을 만들어야 합니다. 각 연산자는 몇 번이든(0번 포함) 쓸 수 있습니다.

수식은 연산자 우선순위를 무시하고 왼쪽에서 오른쪽으로 차례대로 계산하며, 그 결과가 목표 값과 같아야 합니다.

수식은 다음 세 가지 규칙을 지켜야 합니다.

  • 수는 입력에 등장한 순서 그대로 나타나야 합니다.
  • 나눗셈 / 은 나누어떨어질 때(나머지가 0일 때)만 쓸 수 있습니다.
  • 각 연산자를 적용한 뒤의 중간 결과는 항상 −32000-32000 이상 3200032000 이하의 정수여야 합니다.

입력

첫째 줄에 테스트 케이스의 수 nn 이 주어집니다.

이어지는 nn 개의 각 줄은 하나의 테스트 케이스입니다. 각 줄은 수열에 포함된 수의 개수 pp (0<p≤1000 < p \le 100) 로 시작하고, 그 뒤에 pp 개의 양의 정수가, 마지막에 목표 정수가 옵니다. 수열에는 중복된 수가 있을 수 있습니다.

출력

각 테스트 케이스마다 한 줄을 출력합니다.

목표 값을 만드는 수식이 하나라도 있으면, 그 수식 뒤에 = 와 목표 값을 붙여 공백 없이 출력합니다 (예: 5+7/4=3). 수식에는 pp 개의 수와 p−1p-1 개의 연산자가 모두 포함되어야 합니다. 목표 값을 만드는 수식이 여러 개일 수 있으므로, 그중 사전순으로 가장 앞서는(문자열로 비교했을 때 가장 작은) 수식을 출력합니다.

가능한 수식이 없으면 NO EXPRESSION 을 출력합니다.

예제5

  1. 예제 1

    입력
    3
    3 5 7 4 3
    2 1 1 2000
    5 12 2 5 1 2 4
    
    예상 출력
    5+7/4=3
    NO EXPRESSION
    12+2-5-1/2=4
    
  2. 예제 2

    입력
    1
    1 42 42
    
    예상 출력
    42=42
    
  3. 예제 3

    입력
    1
    1 100 99
    
    예상 출력
    NO EXPRESSION
    
  4. 예제 4

    입력
    1
    2 2 3 6
    
    예상 출력
    2*3=6
    
  5. 예제 5

    입력
    1
    2 8 5 3
    
    예상 출력
    8-5=3