2025 만들기

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

요약
1부터 N까지의 수로 시작해 두 수를 골라 +, -, * 연산을 반복했을 때 마지막에 2025만 남길 수 있는지 판정하고, 가능하면 연산 순서를 출력한다.
난이도

보통10점 중 7점

유형
수학, 그리디, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

11부터 NN까지의 NN개의 정수로 이루어진 배열 AA가 주어질 때 다음 33가지 연산 중 원하는 연산을 골라 시행하는 것을 N−1N-1번 진행한다.

  1. 배열의 두 원소 aa, bb를 제거하고 a,+,ba\\,+\\,b를 삽입한다.
  2. 배열의 두 원소 aa, bb를 제거하고 a,−,ba\\,-\\,b를 삽입한다.
  3. 배열의 두 원소 aa, bb를 제거하고 a,×,ba\\, \times \\,b를 삽입한다.

연산을 N−1N-1번 시행한 뒤 마지막으로 남은 수가 20252025일 수 있는지와 가능한 경우 구성 방법까지 구해보자. 단, 계산 과정에서 계산 결과의 절댓값은 10910^9를 넘으면 안 된다.

입력

첫 번째 줄에 배열의 길이 NN이 주어진다. (1≤N≤100,000)(1 \le N \le 100\\,000)

출력

연산을 N−1N-1번 시행한 뒤 마지막으로 남은 수가 20252025일 수 있다면, 첫째 줄에 YES를 출력하고, 불가능하다면 NO를 출력한다.

마지막으로 남은 수가 20252025일 수 있는 경우, 이후 N−1N-1개의 줄에 걸쳐 마지막으로 남은 수가 20252025가 되도록 시행할 연산을 순서대로 출력한다. 출력 형식은 구체적으로 다음과 같다.

  • 각 줄에는 "<num1> <op> <num2>" 의 형식으로 시행한 연산의 정보를 출력한다.
  • <num1>과 <num2>는 연산을 시행하기 이전 배열에 남아있는 서로 다른 두 원소이다.
  • <op>는 +, -, *의 세 가지 문자 중 하나이다. 각각 1번, 2번, 3번 연산의 기호를 의미한다.
  • <num1>과 <num2>가 음이 아닌 정수인 경우, 정수 앞에 부호를 붙여서 출력하면 안 된다.
  • 연산을 수행했을 때 나온 계산 결과의 절댓값은 10910^9 이하여야 한다.

예제2

  1. 예제 1

    입력
    9
    
    예상 출력
    YES
    1 + 2
    3 + 4
    5 + 6
    7 + 8
    9 * 15
    3 - 7
    11 - -4
    135 * 15
    
  2. 예제 2

    입력
    2
    
    예상 출력
    NO