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

Chẵn lẻ tô-pô

Đề bài

Mô tả

n mảnh giấy được đánh số từ 1 đến n. Mảnh thứ i có màu ci, trong đó ci=0 nghĩa là màu đen, ci=1 nghĩa là màu trắng, còn ci=1 nghĩa là mảnh đó chưa được tô màu.

Bạn cần thực hiện hai việc:

  1. Vẽ một số mũi tên nối các cặp mảnh giấy khác nhau. Mỗi mũi tên phải đi từ mảnh có số hiệu nhỏ hơn sang mảnh có số hiệu lớn hơn, và giữa hai mảnh bất kỳ có nhiều nhất một mũi tên.
  2. Tô màu 0 hoặc 1 cho mỗi mảnh giấy chưa được tô.

Sau khi hoàn tất, điểm của cách làm đó được định nghĩa là số đường đi có màu xen kẽ. Một đường đi là một dãy mảnh giấy v1,v2,,vk (với k1) sao cho có mũi tên đi từ vj sang vj+1 với mọi j, và hai mảnh liên tiếp bất kỳ trên đường đi có màu khác nhau. Đường đi chỉ gồm đúng một mảnh giấy cũng được tính là hợp lệ.

Hai cách làm được coi là khác nhau nếu tập mũi tên khác nhau, hoặc cách tô màu khác nhau.

Cho trước một giá trị p{0,1}, hãy đếm số cách vẽ mũi tên và tô màu sao cho điểm thu được đồng dư với p theo modulo 2. In kết quả theo modulo 109+7.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên np.
  • Dòng thứ hai chứa n số nguyên c1,c2,,cn.

Dữ liệu ra

In ra một số nguyên duy nhất là số cách thỏa mãn, lấy theo modulo 109+7.

Ràng buộc

  • 1n50
  • 0p1
  • 1ci1

Ví dụ

Input Output Giải thích
3 1
-1 0 1
6 6 cách cho điểm lẻ. Điểm tương ứng của chúng lần lượt là 3,3,5,5,3,3.
2 1
1 0
1 Cả hai mảnh đã được tô sẵn nên chỉ còn 2 lựa chọn về mũi tên. Không vẽ mũi tên nào thì chỉ có hai đường đi [1][2], điểm bằng 2 (chẵn). Vẽ mũi tên 12 thì có thêm đường đi [12] (hợp lệ vì hai mảnh khác màu), điểm bằng 3 (lẻ). Vậy đúng 1 cách cho điểm lẻ.
1 1
-1
2 Không có cặp mảnh nào nên không vẽ được mũi tên. Điểm luôn bằng 1 (đường đi [1]), tức là lẻ, với cả hai cách tô màu.

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