BOI 2006 - Bitwise Expressions

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1900 Thời gian: 3.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Trong xử lý tín hiệu, ta đôi khi cần tìm giá trị lớn nhất của một biểu thức chứa các phép toán AND và OR theo bit, khi mỗi biến nguyên chỉ được chọn trong một đoạn cho trước.

Biểu thức gồm \(P\) biểu thức con đặt trong ngoặc và nối với nhau bằng phép AND theo bit (&). Mỗi biểu thức con gồm một hoặc nhiều biến nối với nhau bằng phép OR theo bit (|). Các biến được đánh số theo thứ tự xuất hiện. Chẳng hạn, nếu số biến trong bốn biểu thức con lần lượt là \(3,1,2,2\) thì

\[ E=(v_1\mid v_2\mid v_3)\mathbin{\&}(v_4)\mathbin{\&}(v_5\mid v_6)\mathbin{\&}(v_7\mid v_8). \]

Hãy tìm giá trị lớn nhất mà biểu thức có thể nhận.

Dữ liệu vào

Dòng đầu chứa hai số nguyên \(N\)\(P\), lần lượt là tổng số biến và số biểu thức con.

Dòng tiếp theo chứa \(P\) số nguyên \(K_1,K_2,\ldots,K_P\), trong đó \(K_i\) là số biến của biểu thức con thứ \(i\). Mỗi \(K_i\ge 1\) và tổng các \(K_i\) bằng \(N\).

Mỗi dòng trong \(N\) dòng tiếp theo chứa hai số nguyên \(A_j,B_j\), quy định

\[ A_j\le v_j\le B_j. \]

Dữ liệu ra

In một số nguyên duy nhất: giá trị lớn nhất của biểu thức.

Ràng buộc

  • \(1\le P\le N\le 100\).
  • \(0\le A_j\le B_j\le 2\,000\,000\,000\).

Phân nhóm

  • \(30\%\) số bộ dữ liệu có ít hơn một triệu cách gán các biến.

Ví dụ

Ví dụ 1

Input
8 4
3 1 2 2
2 4
1 4
0 0
1 7
1 4
1 2
3 4
2 3
Output
6
Giải thích

Một cách gán tốt nhất cho các biểu thức con các giá trị nhị phân lần lượt là 111, 111, 110, 111, nên kết quả bằng 110, tức \(6\).

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: