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

Học Băm Dịch-XOR (Trung bình)

Đề bài

Mô tả

Cho một xâu nhị phân y{0,1}n có độ dài n. Hãy đếm số giá trị k khác nhau với 0k<n sao cho tồn tại một xâu nhị phân x{0,1}n thỏa mãn:

y=xshiftk(x)

Trong đó là phép XOR theo từng bit, còn shiftk là phép dịch vòng (cyclic shift) xâu sang phải k lần.

Ví dụ: 001111=110, và shift3(00010010111000)=00000010010111.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n, độ dài của xâu y.
  • Dòng thứ hai chứa xâu nhị phân y.

Dữ liệu ra

  • In ra một số nguyên: số giá trị k hợp lệ.

Ràng buộc

  • 1n2·105
  • y chỉ gồm các ký tự 0 và 1, độ dài đúng bằng n.

Ví dụ

Input Output Giải thích
4
1010
3 Với k=1: 1100shift1(1100)=1010. Với k=2: 1000shift2(1000)=1010. Với k=3: 0110shift3(0110)=1010. Không tồn tại x nào để xx=1010 (tức k=0), nên đáp án là 3.
4
0000
4 Xâu toàn 0: với mọi k từ 0 đến 3 đều tồn tại x (chẳng hạn x=0000), nên cả 4 giá trị đều hợp lệ.
2
01
0 Không có giá trị k nào trong {0,1} hợp lệ.

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