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

Tô màu khối Rubik (bản khó)

Đề bài

Mô tả

Cho một cây nhị phân hoàn chỉnh gồm 2k1 đỉnh: mỗi đỉnh i với 1i2k11 có đúng hai con là đỉnh 2i2i+1; các đỉnh từ 2k1 đến 2k1 là lá (không có con).

Bạn cần tô màu mọi đỉnh của cây bằng 6 màu của khối Rubik: Trắng, Vàng, Xanh lá, Xanh dương, Đỏ, Cam.

Một cách tô màu được gọi là hợp lệ nếu mọi cạnh nối hai đỉnh có màu là hai mặt kề nhau trên khối Rubik. Cụ thể, các cặp màu đối nhau (không kề nhau) là: Trắng và Vàng, Xanh lá và Xanh dương, Đỏ và Cam. Hai đỉnh nối bởi một cạnh không được tô cùng màu, cũng không được tô hai màu đối nhau. Nói cách khác, với mỗi màu có đúng 4 màu kề với nó.

Tuy nhiên, có n đỉnh đặc biệt đã được tô màu sẵn; các đỉnh này bắt buộc phải giữ nguyên màu đã cho.

Hãy đếm số cách tô màu hợp lệ toàn bộ cây. Hai cách tô là khác nhau nếu có ít nhất một đỉnh được tô màu khác nhau. Vì kết quả có thể rất lớn, hãy in ra kết quả theo modulo 109+7.

Dữ liệu vào

  • Dòng đầu chứa số nguyên k: số tầng của cây nhị phân hoàn chỉnh.
  • Dòng thứ hai chứa số nguyên n: số đỉnh đã được tô màu sẵn.
  • n dòng tiếp theo, mỗi dòng chứa một số nguyên v và một xâu s: chỉ số đỉnh và màu của đỉnh đó. Xâu s là một trong sáu xâu white, yellow, green, blue, red, orange (lần lượt tương ứng với Trắng, Vàng, Xanh lá, Xanh dương, Đỏ, Cam).

Mỗi đỉnh v xuất hiện nhiều nhất một lần trong dữ liệu vào.

Dữ liệu ra

In ra một số nguyên: số cách tô màu hợp lệ theo modulo 109+7.

Ràng buộc

  • 1k60
  • 1nmin(2k1,2000)
  • 1v2k1

Ví dụ

Input Output Giải thích
3
2
5 orange
2 white
1024 Cây có 7 đỉnh. Đỉnh 2 đã là Trắng và đỉnh 5 đã là Cam (hai màu này kề nhau nên không mâu thuẫn). Năm đỉnh còn lại là 1,3,4,6,7; mỗi đỉnh có đúng 4 lựa chọn khi màu của đỉnh kề phía trên đã cố định, cho 45=1024 cách.
2
2
1 white
2 white
0 Đỉnh 1 và đỉnh 2 nối với nhau nhưng cùng màu Trắng, nên không có cách tô nào hợp lệ.
10
3
1 blue
4 red
5 orange
328925088 Cây có 2101=1023 đỉnh với ba đỉnh đã cố định màu. Kết quả được lấy theo modulo 109+7.

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