Trò chơi 2048

Đề bài

Mô tả

Bạn có một multiset s gồm n số nguyên, trong đó mỗi phần tử là một lũy thừa của 2.

Bạn có thể thực hiện thao tác sau bao nhiêu lần tùy ý (kể cả không lần nào): chọn hai phần tử bằng nhau trong s, xóa cả hai khỏi s và thêm vào s một phần tử mới có giá trị bằng tổng của chúng.

Ví dụ, nếu s={1,2,1,1,4,2,2} và bạn chọn hai số 22, thì s trở thành {1,1,1,4,4,2}.

Bạn thắng nếu trong s xuất hiện số 2048. Hãy xác định xem bạn có thể thắng được hay không.

q truy vấn độc lập, mỗi truy vấn cho một multiset s.

Dữ liệu vào

  • Dòng đầu tiên chứa một số nguyên q — số truy vấn.
  • Với mỗi truy vấn:
    • Dòng thứ nhất chứa một số nguyên n — số phần tử của multiset.
    • Dòng thứ hai chứa n số nguyên s1,s2,,sn — các phần tử của multiset. Đảm bảo mỗi si là một lũy thừa của 2.

Dữ liệu ra

Với mỗi truy vấn, in ra YES nếu có thể thu được số 2048, ngược lại in ra NO. Phân biệt hoa-thường không quan trọng.

Ràng buộc

  • 1q100
  • 1n100
  • 1si229
  • Mỗi si là một lũy thừa của 2.

Ví dụ

Input Output Giải thích
6
4
1024 512 64 512
1
2048
3
64 512 2
2
4096 4
7
2048 2 2048 2048 2048 2048 2048
2
2048 4096
YES
YES
NO
NO
YES
YES
Truy vấn 1: gộp 512+512=1024, rồi 1024+1024=2048. Truy vấn 2: đã có sẵn 2048. Truy vấn 3: tổng các phần tử nhỏ hơn 2048 chỉ là 578, không đủ. Truy vấn 4: 4096 không thể tách thành 2048, và 4 thì quá nhỏ. Truy vấn 5: đã có sẵn 2048. Truy vấn 6: đã có sẵn 2048.
1
3
1024 1024 1
YES Gộp 1024 + 1024 = 2048.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0