Ổn định mảng (phép AND)

Đề bài

Mô tả

Cho một mảng a[0…n−1] gồm các phần tử 0 hoặc 1 (chỉ số bắt đầu từ 0).

Trong một bước, mảng a được thay bằng một mảng mới có cùng độ dài theo quy tắc sau:

  1. Đầu tiên, định nghĩa a→d là mảng a sau khi dịch vòng sang phải d ô, tức là ai→d=a(i+n−d)modn.
  2. Sau đó mỗi phần tử ai được thay bằng ai&ai→d, trong đó & là phép AND logic.

Quá trình kết thúc khi mảng không còn thay đổi. Với mảng a cho trước, hãy xác định xem cuối cùng mảng có gồm toàn số 0 hay không. Nếu có, in ra số bước cần thiết; nếu không, in ra −1.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t (1≤t≤1000) — số bộ test.
  • Với mỗi bộ test:
    • Dòng đầu chứa hai số nguyên n và d (1≤n≤106, 1≤d≤n).
    • Dòng thứ hai chứa n số nguyên ai (0≤ai≤1).

Tổng n trên tất cả các bộ test không vượt quá 106.

Dữ liệu ra

Với mỗi bộ test, in ra một số nguyên trên một dòng: số bước nhỏ nhất để mảng trở thành toàn 0, hoặc −1 nếu điều đó không thể xảy ra.

Ràng buộc

  • 1≤t≤1000
  • 1≤n≤106
  • 1≤d≤n
  • 0≤ai≤1
  • ∑n≤106

Ví dụ

Input Output Giải thích
5
2 1
0 1
3 2
0 1 0
5 2
1 1 0 1 0
4 2
0 1 0 1
1 1
0
1
1
3
-1
0
Test 3: mảng biến đổi [1,1,0,1,0]→[1,0,0,1,0]→[1,0,0,0,0]→[0,0,0,0,0] sau 3 bước. Test 4: với d=2, mỗi phần tử chỉ AND với chính nó hoặc giá trị tương ứng cố định nên mảng không thay đổi — không bao giờ về toàn 0. Test 5: mảng đã toàn 0 ngay từ đầu nên cần 0 bước.
5
2 1
0 1
3 2
0 1 0
5 2
1 1 1 1 0
4 2
0 1 0 1
1 1
0
1
1
4
-1
0
Test 3 ở đây cần 4 bước vì có dãy 4 số 1 liên tiếp (theo vòng dịch) trước khi chạm phần tử 0.

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