Trò chơi 2048
Nộp bài giải
Điểm:
2,00 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
Đầu vào:
stdin
Đầu ra:
stdout
Dạng bài
Ngôn ngữ cho phép
Ada, Algol, Assembly, Awk, C, C#, C++, D, Dart, Forth, Fortran, Go, Groovy, Java, Javascript, Kotlin, Lisp, Lua, Nim, ObjC, Pascal, Perl, PHP, Pike, Python, Racket, Ruby, Rust, Scheme, Scratch, Sed, TCL, Typescript, V, Zig
Bạn có một multiset gồm số nguyên, trong đó mỗi phần tử là một lũy thừa của .
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 , xóa cả hai khỏi và thêm vào một phần tử mới có giá trị bằng tổng của chúng.
Ví dụ, nếu và bạn chọn hai số và , thì trở thành .
Bạn thắng nếu trong xuất hiện số . Hãy xác định xem bạn có thể thắng được hay không.
Có truy vấn độc lập, mỗi truy vấn cho một multiset .
Dữ liệu vào
- Dòng đầu tiên chứa một số nguyên — số truy vấn.
- Với mỗi truy vấn:
- Dòng thứ nhất chứa một số nguyên — số phần tử của multiset.
- Dòng thứ hai chứa số nguyên — các phần tử của multiset. Đảm bảo mỗi là một lũy thừa của .
Dữ liệu ra
Với mỗi truy vấn, in ra YES nếu có thể thu được số , ngược lại in ra NO. Phân biệt hoa-thường không quan trọng.
Ràng buộc
- Mỗi là một lũy thừa của .
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