QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 2048 MB Total points: 100

#7955. Kopiowanie tandemowe

Statistics

Kopiowanie tandemowe to operacja na DNA, w której powtarza się ciąg jednego lub więcej kolejnych nukleotydów, a powtórzenia są bezpośrednio obok siebie. Innymi słowy, kopiuje się spójny fragment nukleotydów i wkleja kopię tuż za nim. Na przykład skopiowanie $\mathrm{ATC}$ w $\mathrm{ATCG}$ daje $\mathrm{ATCATCG}$. Kolejne kopiowanie w otrzymanym ciągu może dać $\mathrm{ATCATTCG}$. Poniższy przykład pokazuje serię kopii z $\mathrm{ATCG}$; w każdym kroku kopiowany jest podkreślony fragment.

$$\underline{\mathrm{ATC}}\mathrm G\Rightarrow\mathrm{ATCA}\underline{\mathrm T}\mathrm{CG}\Rightarrow\underline{\mathrm{AT}}\mathrm{CATTCG}\Rightarrow\mathrm{ATATC}\underline{\mathrm{ATT}}\mathrm{CG}\Rightarrow\cdots$$

Mówimy, że $\mathrm{ATCG}$ wytwarza wszystkie te ciągi przez kopiowanie tandemowe. Łatwo zauważyć, że wybór innego fragmentu w każdym kroku pozwala wytwarzać różne ciągi. Ponadto, kontynuując kopiowanie tyle razy, ile potrzeba, $\mathrm{ATCG}$ może zasadniczo wytworzyć nieskończenie wiele ciągów.

Zwykle kopiowanie dłuższego fragmentu jest droższe. Na przykład $\underline{\mathrm{ATC}}\mathrm G\Rightarrow\mathrm{ATCATCG}$ kopiuje trzy nukleotydy i jest zatem droższe niż $\mathrm{ATCA}\underline{\mathrm T}\mathrm{CG}\Rightarrow\mathrm{ATCATTCG}$, które kopiuje jeden nukleotyd. Innymi słowy, długość kopiowanego fragmentu w każdym kroku ma kluczowe znaczenie dla kosztu.

Ponieważ łatwo skopiować pojedynczy nukleotyd, laboratorium ICPC wygodnie jest przechowywać ciągi, w których kolejne nukleotydy zawsze są różne; oszczędza to miejsce. Na przykład $\mathrm{ATTTG}$ można uzyskać z $\mathrm{ATG}$, dwukrotnie kopiując $\mathrm T$, więc lepiej przechowywać tylko krótszy ciąg $\mathrm{ATG}$ zamiast $\mathrm{ATTTG}$.

Z powodu niedawnego cięcia budżetu laboratorium ICPC może jednorazowo kopiować tandemowo co najwyżej dwa nukleotydy; kopiowany fragment ma więc w każdym kroku długość co najwyżej dwa. Może natomiast powtarzać operację dowolnie wiele razy. Na przykład dla $\mathrm{ABCD}$ skopiowanie $\mathrm B$ daje $\mathrm{ABBCD}$, a skopiowanie $\mathrm{BC}$ daje $\mathrm{ABCBCD}$. Nie można jednak skopiować spójnego fragmentu $\mathrm{ABC}$, bo jest dłuższy niż dwa.

Dany jest ciąg źródłowy $s$ i docelowy $t$. Policz wszystkie poprawne podciągi spójne $s\prime$ ciągu $s$, z których odpowiednia liczba kopii tandemowych może utworzyć ciąg $x$ zawierający $t$ jako podciąg spójny. Żadne dwa kolejne nukleotydy w ciągu źródłowym nie są takie same, ale w docelowym mogą być. Na przykład $\mathrm{CCA}$ i $\mathrm{ATTGC}$ nie mogą być ciągami źródłowymi, ale mogą być docelowymi.

Dla $s=\mathrm{ACATGCAT}$ i $t=\mathrm{CCACATTT}$ wybieramy podciąg spójny $s\prime=\mathrm{CATGC}$ ciągu $s$ i wykonujemy następującą serię kopii:

$$s\prime=\underline{\mathrm C}\mathrm{ATGC}\Rightarrow\mathrm C\underline{\mathrm{CA}}\mathrm{TGC}\Rightarrow\mathrm{CCACA}\underline{\mathrm T}\mathrm{GC}\Rightarrow\mathrm{CCACAT}\underline{\mathrm T}\mathrm{GC}\Rightarrow\mathrm{CCACATTTGC}$$

Otrzymany ciąg zawiera $t$ jako podciąg spójny.

Oto inny przykład podciągu spójnego. Dla $s\prime=\mathrm{CAT}$:

$$s\prime=\underline{\mathrm{CA}}\mathrm T\Rightarrow\underline{\mathrm C}\mathrm{ACAT}\Rightarrow\mathrm{CCACA}\underline{\mathrm T}\Rightarrow\mathrm{CCACAT}\underline{\mathrm T}\Rightarrow\mathrm{CCACATTT}=t$$

Pokazuje to, że z $\mathrm{CAT}$ można wytworzyć ciąg docelowy przez serię kopii tandemowych.

Łatwo sprawdzić, że łączna liczba poprawnych podciągów spójnych $s$ wynosi $14$. Pierwsze i drugie wystąpienie $\mathrm{CAT}$ w $s$ są liczone jako różne poprawne podciągi spójne. Należy więc rozważyć wszystkie podciągi spójne $s$ i liczyć każdy poprawny oddzielnie.

Oto kolejny przykład. Dla $s=\mathrm{AB}$ i $t=\mathrm{BA}$ można wybrać podciąg spójny $\mathrm{AB}$ i skopiować $\mathrm{AB}$. Wynik $\mathrm{ABAB}$ zawiera $\mathrm{BA}$ jako podciąg spójny. Żaden inny podciąg spójny $s$ nie może wytworzyć $\mathrm{BA}$ jako podciągu spójnego, więc liczba poprawnych wynosi jeden.

Mając ciąg źródłowy $s$, w którym żadne dwa kolejne znaki nie są takie same, i ciąg docelowy $t$, napisz program wypisujący liczbę poprawnych podciągów spójnych $s\prime$ ciągu $s$. Podciąg $s\prime$ jest poprawny, jeśli seria kopii tandemowych może wytworzyć ciąg zawierający $t$ jako podciąg spójny; w każdym kroku wolno skopiować co najwyżej dwa kolejne znaki.

Wejście

Program czyta ze standardowego wejścia. Wejście ma dwa wiersze: pierwszy to ciąg źródłowy $s$, a drugi to docelowy $t$. Każdy składa się z wielkich liter od A do Z i zachodzi $1\le |s|,|t|\le 2\times 10^4$.

Wyjście

Program pisze na standardowe wyjście. Wypisz dokładnie jeden wiersz zawierający liczbę poprawnych podciągów spójnych, z których seria kopii tandemowych może wytworzyć ciąg zawierający ciąg docelowy jako podciąg spójny.

Poniżej pokazano przykładowe wejście i wyjście dla czterech przypadków testowych.

Przykład

Wejście 1

ACGCG
CCG

Wyjście 1

9

Wejście 2

TATCGC
TTCCG

Wyjście 2

6

Wejście 3

ABCABC
ABC

Wyjście 3

7

Wejście 4

ABCABC
ABCABC

Wyjście 4

1

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.