canuc80k1027·28/40

Đường Đi XOR Mục Tiêu

Nộp bài trên LQDOJ

Bài 10 · Meet in the Middle

Cho một bảng hình chữ nhật gồm hàng và cột. Ô ở hàng , cột chứa số nguyên không âm .

Một đường đi bắt đầu tại ô và kết thúc tại ô . Ở mỗi bước, bạn chỉ được đi sang ô ngay bên phải hoặc ô ngay bên dưới, miễn là ô đó vẫn nằm trong bảng. Giá trị của một đường đi là phép XOR theo bit của tất cả các số ghi trên những ô mà đường đi đi qua, bao gồm cả ô đầu và ô cuối.

Hãy đếm số đường đi có giá trị đúng bằng .

Input

  • Dòng đầu chứa ba số nguyên và .
  • Trong dòng tiếp theo, dòng thứ chứa số nguyên .

Output

  • In một số nguyên: số đường đi từ đến có giá trị XOR bằng .

Constraints

  • .
  • .
  • .

Scoring

  • Subtask ( số điểm): và .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

2 3 23
1 2 4
8 4 16

Output

2

Giải thích: Có hai đường đi đạt XOR : phải, phải, xuống và phải, xuống, phải; cả hai lần lượt đi qua các giá trị . Đường còn lại có XOR nên không được tính.

Lời giải tóm tắt
  • Phân tích: Mỗi đường đi có đúng n+m-2 bước. Chọn một lớp giữa theo số bước đã đi rồi tách đường đi thành một nửa xuất phát từ (1,1) và một nửa đi ngược từ (n,m). Mỗi trạng thái nửa đường chỉ cần lưu ô kết thúc ở lớp giữa và XOR của các ô đã đi qua.
  • Thuật toán: Đặt L=n+m-2, p=floor(L/2) và q=L-p. Duyệt mọi nửa đường dài q bước từ (n,m) đi lên hoặc sang trái; với từng ô gặp, đếm tần suất mỗi XOR hậu tố. Sau đó duyệt mọi nửa đường dài p bước từ (1,1). Nếu XOR tiền tố là x và ô gặp có giá trị v, XOR hậu tố cần tìm là K xor x xor v, vì v đã nằm trong cả hai nửa và phải được loại bớt một lần. Cộng tần suất tương ứng tại đúng ô gặp vào đáp án.
  • Chứng minh: Mỗi đường đi hoàn chỉnh cắt lớp giữa tại đúng một ô và được tách duy nhất thành một tiền tố dài p bước cùng một hậu tố dài q bước. Ngược lại, một tiền tố và một hậu tố gặp cùng ô ghép lại thành đúng một đường đi hợp lệ. Gọi XOR hai nửa là x và y, còn giá trị ô gặp là v. Ô gặp xuất hiện trong cả x lẫn y, nên XOR của đường hoàn chỉnh là x xor y xor v. Vì thế đường đi đạt K khi và chỉ khi y = K xor x xor v. Thuật toán đếm đúng mọi hậu tố thỏa đẳng thức này theo tần suất và chỉ ghép các nửa tại cùng ô, nên mỗi đường đi hợp lệ được tính đúng một lần và không có đường đi không hợp lệ nào được tính.
  • Độ phức tạp: Mỗi phía sinh nhiều nhất 2^19 nửa đường. Thời gian kỳ vọng O(2^{floor(L/2)} + 2^{ceil(L/2)}), bộ nhớ O(2^{ceil(L/2)}), với L=n+m-2.