trang chủ / đề bài / tht23_ck_kand

Trò chơi kAND

Đề bài

Mô tả

Alice và Bob cùng chơi một trò chơi trên dãy số nguyên. Alice luôn muốn nhanh chóng tìm được một đoạn gồm các phần tử liên tiếp mà khi tính AND (&) của các phần tử đó bằng 0. Bob thì tìm cách thay đổi các số để làm khó Alice. Cụ thể, Bob muốn nhờ bạn lập trình giải bài toán sau:

Cho số nguyên k (1≤k≤n) và hai dãy số a và c cùng có độ dài n. Với mỗi vị trí i (1≤i≤n), ta có thể thay đổi ai thành giá trị bất kì với chi phí là ci. Tìm tổng chi phí nhỏ nhất để thay đổi dãy a sao cho

ai&ai+1&…&ai+k−1=0

với mọi 1≤i≤n−k+1.

Nhắc lại, phép toán AND (có kí hiệu là &) được định nghĩa như sau: Kết quả của phép toán AND giữa hai số nguyên không âm x và y là một số nguyên không âm z trong đó bit thứ i trong biểu diễn nhị phân của z sẽ là 1 khi và chỉ khi bit thứ i trong biểu diễn nhị phân của x và y đồng thời bằng 1, ngược lại bit thứ i trong biểu diễn nhị phân của z sẽ là 0.

Dữ liệu vào

Dòng đầu tiên là một số nguyên t (1≤t≤106) cho biết số bộ dữ liệu, tiếp theo mỗi bộ có khuôn dạng:

  • Dòng đầu tiên gồm hai số nguyên n và k (1≤k≤n≤106).
  • Dòng thứ hai gồm n số nguyên a1,a2,…,an (0≤ai<230).
  • Dòng cuối cùng gồm n số nguyên c1,c2,…,cn (0≤ci<230).

Dữ liệu đảm bảo tổng các giá trị của n trong các bộ dữ liệu không vượt quá 106.

Dữ liệu ra

Gồm t dòng, mỗi dòng tương ứng là tổng chi phí nhỏ nhất tìm được của bộ dữ liệu xuất hiện trong dữ liệu vào.

Ràng buộc

  • 1≤t≤106.
  • 1≤k≤n≤106, tổng các giá trị của n trong các bộ dữ liệu không vượt quá 106.
  • 0≤ai<230, 0≤ci<230.

Subtasks

  • Subtask 1 (20% số điểm): Tổng các giá trị của n trong t bộ dữ liệu không vượt quá 20.
  • Subtask 2 (20% số điểm): ci≤1 với mọi 1≤i≤n.
  • Subtask 3 (30% số điểm): Tổng các giá trị của n trong t bộ dữ liệu không vượt quá 5000.
  • Subtask 4 (30% số điểm): Không có ràng buộc gì thêm.

Ví dụ

Input Output Giải thích
1
5 2
1 2 3 2 1
3 2 5 2 3
4 Các đoạn độ dài 2 có AND khác 0 là (2,3) và (3,2) (vị trí 2..3 và 3..4). Đổi a2 và a4 thành 0 tốn 2+2=4; đổi riêng a3 tốn 5.
2
3 1
0 5 6
7 2 9
4 4
7 7 7 7
5 1 1 5
11
1
Bộ 1: với k=1 mọi phần tử phải bằng 0, phải đổi a2 và a3, chi phí 2+9=11. Bộ 2: chỉ có một đoạn là cả dãy, đổi một phần tử rẻ nhất (c2=1).

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.402 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.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0