trang chủ / bài tập / coinquery

Xu và truy vấn

Đề bài

Mô tả

Bạn có n đồng xu, đồng xu thứ i có mệnh giá ai. Mọi mệnh giá đều là luỹ thừa nguyên không âm của 2, tức là ai=2d với d nào đó.

Cần trả lời q truy vấn. Truy vấn thứ j cho một số nguyên bj: hãy tìm số lượng đồng xu ít nhất cần dùng để tạo ra đúng tổng bj, chỉ được chọn một tập con các đồng xu đang có. Nếu không thể tạo ra tổng bj, đáp án của truy vấn đó là 1.

Các truy vấn là độc lập: sau mỗi truy vấn, toàn bộ đồng xu được trả lại, nên đáp án của truy vấn này không ảnh hưởng tới truy vấn khác.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nq, số đồng xu và số truy vấn.
  • Dòng thứ hai chứa n số nguyên a1,a2,,an, mệnh giá các đồng xu.
  • q dòng tiếp theo, dòng thứ j chứa một số nguyên bj.

Dữ liệu ra

In ra q dòng. Dòng thứ j chứa đáp án của truy vấn thứ j: số đồng xu ít nhất để tạo ra tổng bj, hoặc 1 nếu không thể.

Ràng buộc

  • 1n,q2·105
  • 1ai2·109, và ai là luỹ thừa của 2
  • 1bj109

Ví dụ

Input Output Giải thích
5 4
2 4 8 2 4
8
5
14
10
1
-1
3
2
Với b=8: dùng đúng đồng xu 8. Với b=5: mọi đồng xu đều chẵn nên tổng luôn chẵn, không thể ra 5. Với b=14: 8+4+2. Với b=10: 8+2.
3 3
1 1 1
1
2
3
1
2
3
Chỉ có ba đồng xu mệnh giá 1, nên tạo tổng b luôn cần đúng b đồng xu.
6 6
1 1 2 2 4 4
2
4
8
3
6
12
1
1
2
2
2
4
Với b=2 nên dùng một đồng 2 thay vì hai đồng 1. Với b=12: 4+4+2+2, vì chỉ có hai đồng xu mệnh giá 4.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.400 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0