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

Tô màu dãy ngoặc

Đề bài

Mô tả

Cho một dãy ngoặc đúng s chỉ gồm các ký tự "(" và ")". Một dãy ngoặc được gọi là đúng nếu có thể chèn thêm số và toán tử để thu được một biểu thức toán học hợp lệ (ví dụ "(())()" và "()" là đúng, còn ")()" và "(()" là sai). Trong một dãy ngoặc đúng, mỗi dấu ngoặc mở tương ứng với đúng một dấu ngoặc đóng khớp với nó và ngược lại.

Bạn được phép tô màu một số dấu ngoặc sao cho thỏa mãn đồng thời cả ba điều kiện sau:

  • Mỗi dấu ngoặc hoặc không được tô màu, hoặc được tô màu đỏ, hoặc được tô màu xanh.
  • Với mỗi cặp ngoặc khớp nhau, đúng một trong hai dấu được tô màu (dấu còn lại không tô).
  • Hai dấu ngoặc kề nhau (đứng liền nhau trong dãy) mà cùng được tô màu thì không được cùng màu.

Hãy đếm số cách tô màu khác nhau thỏa mãn các điều kiện trên. Hai cách tô được coi là khác nhau nếu có ít nhất một dấu ngoặc khác màu (kể cả trạng thái không tô). Vì kết quả có thể rất lớn, hãy in ra phần dư khi chia cho 109+7.

Dữ liệu vào

Một dòng duy nhất chứa xâu s là một dãy ngoặc đúng.

Dữ liệu ra

In ra một số nguyên duy nhất là số cách tô màu hợp lệ, lấy phần dư theo modulo 109+7.

Ràng buộc

  • 2|s|700
  • |s| là số chẵn và s luôn là một dãy ngoặc đúng.

Ví dụ

Input Output Giải thích
(()) 12 Có hai cặp ngoặc lồng nhau. Mỗi cặp chọn đúng một dấu để tô, mỗi dấu tô có 2 màu; sau khi loại các trường hợp hai dấu tô kề nhau cùng màu, còn lại 12 cách.
() 4 Cặp ngoặc duy nhất: tô dấu mở hoặc dấu đóng (2 lựa chọn), mỗi lựa chọn 2 màu, tổng cộng 4 cách. Hai dấu này không kề nhau khi cùng tô vì luôn chỉ một dấu được tô.
(()()) 40 Dãy có ba cặp ngoặc; đếm theo quy hoạch động trên các đoạn cho ra 40 cách.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 GO groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0