만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Auto-Coin-o-Matic

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

요약
동전이 하나씩 소진되는 상황에서 금액 v를 만드는 데 필요한 최소 동전 수를 질의마다 구합니다. 만들 수 없으면 -1을 출력합니다.
난이도

보통10점 중 6점

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

문제

드디어 새 발명품 Auto-Coin-o-Matic을 공개하는 날이다. 사람들은 카드를 넣고 원하는 금액을 입력한 뒤, 가장 적은 개수의 동전으로 정확한 잔돈을 받는다. 당신은 기쁘면서도 불안한 마음으로 그 모습을 지켜본다.

기계가 정말로 가장 적은 개수의 동전을 냈는지 확인하려고, 거래를 몇 개 무작위로 골라 검증하기로 한다. 그런데 기계에서 일부 종류의 동전이 떨어지고 있다. 그래도 기계가 올바르게 동작할까?

입력

첫 줄에 정수 nn과 mm (1≤n≤20001 \le n \le 2000, 1≤m≤1051 \le m \le 10^5)이 주어진다.

다음 줄에는 처음에 보유한 동전의 액면가 d1,d2,…,dnd_1, d_2, \ldots, d_n (1≤di≤1051 \le d_i \le 10^5)이 주어진다. 모든 액면가는 서로 다르다.

다음 mm개의 줄에는 문자 cc (c∈{Q,X}c \in \{Q, X\})와 정수 vv (1≤v≤1051 \le v \le 10^5)가 주어진다. cc는 사건의 종류이고, vv는 사건의 값이다.

  • cc가 Q이면 질의다. 금액 vv를 정확히 만드는 데 필요한 동전의 최소 개수를 출력한다. 현재 보유한 액면가로 vv를 정확히 만들 수 없으면 −1-1을 출력한다.
  • cc가 X이면 액면가 vv의 동전이 떨어졌다는 뜻이다. 이후의 질의에서는 이 액면가를 사용할 수 없다. 각 X 사건의 vv는 기계가 현재 보유한 액면가임이 보장된다.

출력

질의 사건의 개수를 kk라 할 때, kk줄을 출력한다. ii번째 줄에는 ii번째 질의의 잔돈을 주는 데 필요한 동전의 최소 개수를 출력한다. 불가능하면 −1-1을 출력한다.

예제1

  1. 예제 1

    입력
    4 7
    1 2 5 10
    Q 23
    X 1
    Q 23
    X 5
    Q 23
    X 10
    Q 22
    
    예상 출력
    4
    6
    -1
    11