trang chủ / đề bài / voi21_or

Phép toán OR

Đề bài

Mô tả

Nội dung chính trong tiết học Tin học trên lớp của Nam ngày hôm nay là về phép toán OR. Phép toán OR (có kí hiệu là |) được định nghĩa như sau: Kết quả của phép toán OR giữa 2 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à 0 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 0, ngược lại bit thứ i trong biểu diễn nhị phân của z là 1.

Ví dụ, x=12 có biểu diễn nhị phân là 1100, y=5 có biểu diễn nhị phân là 0101, khi đó x∣y có biểu diễn nhị phân là 1101, tức giá trị 13 trong hệ cơ số thập phân.

Phép toán OR có tính chất giao hoán và kết hợp: x∣y=y∣x và x∣(y∣z)=(x∣y)∣z.

Để ôn tập nội dung đã học, thầy giáo ra cho cả lớp bài tập về nhà như sau: Cho n số nguyên không âm a1,a2,…,an và ba số nguyên k,L,R. Hãy đếm xem có bao nhiêu bộ k chỉ số (i1,i2,…,ik) thỏa mãn đồng thời hai điều kiện:

  • 1≤i1<i2<…<ik≤n;
  • Đặt v=ai1∣ai2∣…∣aik thì L≤v≤R và v chia hết cho 3.

Gọi S là đáp số đúng cho bài tập thầy giáo ra, vì S có thể có giá trị rất lớn và để học sinh tập trung vào vấn đề chính của bài toán nên thầy giáo chỉ yêu cầu học sinh đưa ra được phần dư của S khi chia cho 109+7.

Yêu cầu: Hãy giúp Nam xác định phần dư của S khi chia cho 109+7.

Dữ liệu vào

  • Dòng đầu tiên chứa bốn số nguyên n,k,L,R (1≤k≤n≤106; 0≤L≤R≤106);
  • Dòng tiếp theo chứa n số nguyên không âm a1,a2,…,an (ai≤106).

Các số trên cùng một dòng cách nhau bởi dấu cách.

Dữ liệu ra

In ra một số nguyên duy nhất là phần dư của S khi chia cho 109+7.

Ràng buộc

  • 1≤k≤n≤106.
  • 0≤L≤R≤106.
  • 0≤ai≤106.

Subtasks

  • Subtask 1 (20% số điểm): n≤20 và ai≤200 (1≤i≤n).
  • Subtask 2 (20% số điểm): n≤200 và ai≤200 (1≤i≤n).
  • Subtask 3 (20% số điểm): L=R và mọi ai (1≤i≤n) là lũy thừa của 2.
  • Subtask 4 (20% số điểm): L=R.
  • Subtask 5 (20% số điểm): không có ràng buộc gì thêm.

Ví dụ

Input Output Giải thích
5 2 1 7
1 2 5 6 4
4 Có tất cả 4 cách chọn 2 số trong 5 số thỏa mãn yêu cầu: a1∣a2=1∣2=3; a2∣a4=2∣6=6; a2∣a5=2∣4=6; a4∣a5=6∣4=6.
6 3 6 6
2 4 6 1 3 4
4 Ví dụ thêm (không có trong đề gốc). Cần v=6: mọi số được chọn phải là tập con bit của 6, tức là thuộc {2,4,6,4} (các chỉ số 1,2,3,6); cả 4 bộ ba chỉ số từ đây đều có OR bằng 6.

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