lant

Time limit: 0.02s
Memory limit: 16MB
Input: lant.in
Output: lant.out

Ion este un lingvist pasionat. Recent el a descoperit un text scris într-o limbă necunoscută. Textul este scris pe mai multe linii şi este format din cuvinte scrise cu litere mici din alfabetul latin, separate prin spaţii sau/şi semne de punctuaţie (,:;.!?-).

Ion a fost frapat că există multe similitudini între cuvintele din text. Fiind foarte riguros, Ion defineşte similitudinea a două cuvinte după cum urmează.

Fie c1c_1 şi c2c_2 două cuvinte. Cuvântul c1c_1 poate fi obţinut din cuvântul c2c_2 printr-o succesiune de operaţii elementare. Operaţiile elementare ce pot fi folosite sunt:

  • ștergerea unui caracter
  • inserarea unui caracter
  • modificarea unui caracter

Definim similitudinea dintre c1c_1 şi c2c_2 ca fiind numărul minim de operaţii aplicate cuvântului c1c_1 pentru a ajunge la cuvântul c2c_2.

Fie c0c_0 primul cuvânt din text. Începând cu c0c_0 putem construi lanţuri de kk-similitudine.

Un lanţ de kk-similitudine este o succesiune de cuvinte distincte din text cu următoarele proprietăţi:

  • dacă cuvântul xx apare în lanţ înaintea cuvântului yy, atunci prima apariţie a lui xx în text precedă prima apariţie a lui yy în text;
  • dacă xx şi yy sunt cuvinte consecutive în lanţ (în ordinea x yx\ y) , atunci similitudinea dintre xx şi yy este k≤k;
  • lanţul este maximal (adică nu putem adăuga încă un cuvânt la sfârşitul acestui lanţ, astfel încât să fie respectate proprietăţile precedente).

Cerinţă

Scrieţi un program care să determine numărul de lanţuri de kk-similitudine care încep cu c0c_0.

Date de intrare

Fişierul de intrare lant.in conţine pe prima linie valoarea kk. Pe următoarele linii se află textul dat.

Date de ieşire

Fişierul de ieşire lant.out va conţine o singură linie pe care va fi scris numărul de lanţuri de kk-similitudine care încep cu c0c_0.

Restricţii

  • Lungimea unei linii din text nu depăşeşte 1 0001\ 000 de caractere.
  • Lungimea unui cuvânt nu depăşeşte 3030 de caractere.
  • Numărul total de cuvinte 150≤ 150.
  • Pentru datele de test, numărul de lanţuri de kk-similitudine care încep cu c0c_0 va fi 2 000 000 000≤ 2\ 000\ 000\ 000.
  • Enunțul a fost modificat

Exemplu

lant.in

5
ana are mere, banane,
pere si castane.

lant.out

6

Explicații

Lanţurile de 55-similitudine care se pot forma sunt:
ana are mere pere
ana are pere
ana are banane castane
ana are si
ana banane castane
ana si

Problem info

ID: 51

Editor: liviu

Author:

Source: OJI 2005 XI-XII: Problema 1

Tags:

OJI 2005 XI-XII

Log in or sign up to be able to send submissions!