Logo
(追記) (追記ここまで)

31711번 - Monety 다국어

시간 제한메모리 제한제출정답맞힌 사람정답 비율
25 초 1024 MB111100.000%

문제

Natalia i Cezary lubią grać w gry, a najbardziej w takie, które sami wymyślili. Postanowili, że ułożą przed sobą ciąg stosów monet, po m monet w każdym, przy czym każda moneta będzie albo niebieska, albo czerwona. Natalia w swoim ruchu będzie mogła wybrać dowolną niebieską monetę i usunąć ją z gry wraz ze wszystkimi monetami znajdującymi się nad nią w stosie. Analogicznie, w swoim ruchu, Cezary będzie mógł wybrać dowolną czerwoną monetę i usunąć ją i wszystkie monety z tego samego stosu znajdujące się powyżej. Gracze swoje ruchy wykonywać będą na zmianę, a przegrywa ten, kto nie będzie mógł wykonać prawidłowego ruchu – to jest gdy wszystkie jego monety zostały już wcześniej usunięte z gry.

Znając już zasady, muszą teraz ustalić początkowy stan gry – ciąg d stosów, z których każdy będzie zawierał dokładnie m monet. Ani Natalia, ani Cezary nie chcą mieć nieuczciwej przewagi, więc zgodnie stwierdzili, że ciąg stosów ma być sprawiedliwy. Ciąg stosów nazywamy sprawiedliwym, jeśli przy założeniu, że Natalia i Cezary grają optymalnie, rozgrywkę wygra ten gracz, który nie wykonuje pierwszego ruchu. Tak więc jeśli pierwszy ruch wykona Natalia, to przy optymalnej strategii wygra Cezary, i vice versa: jeśli rozpocznie Cezary, to wygra Natalia.

Para ułożyła już pierwsze k stosów monet po m monet każdy. Teraz zastanawia się, w jaki sposób ów ciąg stosów dokończyć. Doszli już oni do wniosku, że nie ma sensu, żeby w grze było więcej niż n stosów monet.

Pomóż im i dla każdej liczby d z przedziału [k, n] powiedz, ile istnieje różnych sprawiedliwych ciągów d stosów po m monet, które zaczynają się tym ciągiem stosów, który już ułożyli. Dwa ciągi stosów uważamy za różne, jeśli istnieje istnieją i ∈ [1, d] oraz j ∈ [1, m] takie, że j-ta moneta na i-tym stosie jest niebieska w jednym z tych ciągów, a czerwona w drugim.

Jako że wyniki te mogą być bardzo duże, to wystarczy, że podasz ich reszty z dzielenia przez 109 + 7.

입력

W pierwszym wierszu standardowego wejścia znajdują się trzy liczby całkowite n, m i k (1 ≤ n ≤ 32; 1 ≤ m ≤ 24; 0 ≤ k ≤ n), oznaczające odpowiednio ograniczenie na liczbę stosów, liczbę monet w każdym stosie oraz liczbę już stworzonych stosów.

Kolejne k wierszy zawiera opisy już ustawionych stosów; i-ty z nich zawiera ciąg znaków ‘N’ oraz ‘C’ długości dokładnie m, który oznacza kolory monet w i-tym stosie, zaczynając od dołu. Jeśli j-ty znak tego ciągu to ‘N’, to w i-tym stosie j-ta moneta od dołu jest niebieska. W przeciwnym razie ten znak to ‘C’, a owa moneta jest czerwona.

출력

W jedynym wierszu wyjścia powinien znaleźć się ciąg n − k + 1 liczb całkowitych, gdzie i-ta z nich powinna być resztą z dzielenia przez 109 + 7 liczby sposobów, na które można wydłużyć ciąg o i − 1 stosów tak, aby finalny ciąg stosów był sprawiedliwy.

제한

예제 입력 1

3 3 1
CCN

예제 출력 1

0 1 3

예제 입력 2

2 1 0

예제 출력 2

1 0 2

예제 입력 3

4 2 4
CN
NC
CC
NN

예제 출력 3

1

노트

Wyjaśnienie przykładu: W pierwszym teście przykładowym, jeśli nie dołożymy żadnych stosów, to ciąg jednoelementowy nie będzie sprawiedliwy. Możemy natomiast dołożyć stos NNC – taki ciąg dwóch stosów już będzie sprawiedliwy. Dwa stosy możemy dołożyć na trzy sposoby: [CCN, NNN], [NNN, CCN], [NCN, NCN].

출처

Contest > Algorithmic Engagements > PA 2024 5-6번

(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /