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

Đếm dãy con theo tổng XOR

Đề bài

Mô tả

Cho một mảng gồm n số nguyên không âm a1,a2,,an.

Bạn cần trả lời q truy vấn. Mỗi truy vấn gồm hai số nguyên lx: hãy đếm số dãy con (subsequence) của l phần tử đầu tiên a1,a2,,al sao cho tổng XOR (XOR theo bit) của các phần tử trong dãy con đó bằng đúng x.

Một dãy con có thể chứa các phần tử không liền kề nhau, và hai dãy con được coi là khác nhau nếu chúng khác nhau về tập chỉ số được chọn. Dãy con rỗng có tổng XOR bằng 0, và dãy con chỉ gồm một phần tử có tổng XOR bằng chính phần tử đó.

Vì kết quả có thể rất lớn, hãy in ra phần dư của nó khi chia cho 109+7.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nq — số phần tử của mảng và số truy vấn.
  • Dòng thứ hai chứa n số nguyên a1,a2,,an.
  • q dòng tiếp theo, mỗi dòng chứa hai số nguyên lx mô tả một truy vấn.

Dữ liệu ra

Với mỗi truy vấn, in ra trên một dòng số lượng dãy con thỏa mãn, lấy phần dư khi chia cho 109+7.

Ràng buộc

  • 1n,q105
  • 0ai<220
  • 1ln
  • 0x<220

Ví dụ

Input Output Giải thích
5 5
0 1 2 3 4
4 3
2 0
3 7
5 7
5 8
4
2
0
4
0
Truy vấn 1: trong {0,1,2,3}4 dãy con XOR bằng 3 (ví dụ {3}, {0,3}, {1,2}, {0,1,2}). Truy vấn 3: không tạo được XOR =7 từ {0,1,2}. Truy vấn 5: không tạo được XOR =8.
3 2
1 1 1
3 1
2 0
4
2
Truy vấn 1: từ ba số 1, các dãy con có XOR =1 gồm chọn 1 hoặc 3 phần tử — tổng cộng 4 cách. Truy vấn 2: từ hai số 1, XOR =0 khi chọn dãy con rỗng hoặc cả hai — 2 cách.

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 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