Középiskolai Matematikai és Fizikai Lapok
Informatika rovattal
Kiadja a MATFUND Alapítvány
Már regisztráltál?
Új vendég vagy?

Az S. 145. feladat (2020. szeptember)

S. 145. Van egy szótárunk \(\displaystyle N\) db szóval. Azt szeretnénk tudni, hányféleképpen tudjuk a szótárból választott szavakat a dominóhoz hasonlóan összeilleszteni úgy, hogy azok \(\displaystyle K\) betű hosszan átfedjék egymást. Tehát a kérdés: hány olyan \(\displaystyle (i,j)\) rendezett számpár (\(\displaystyle 1\le i,j\le N\)) van, melyre az \(\displaystyle i\)-edik szó utolsó \(\displaystyle K\) betűjéből alkotott sorozat megegyezik a \(\displaystyle j\)-edik szó első \(\displaystyle K\) betűjéből alkotott sorozattal.

Bemenet: az első sor tartalmazza az \(\displaystyle N\) és \(\displaystyle K\) számokat. A következő \(\displaystyle N\) sor mindegyike egy, az angol ABC kisbetűiből álló (nem feltétlenül értelmes) szót tartalmaz.

Kimenet: a megfelelő összeillesztések, vagyis számpárok száma.

Példa:

Korlátok: \(\displaystyle 2\le N\le {10}^{5}\), \(\displaystyle 1\le K\le 100\), minden szó legalább \(\displaystyle K\) és legfeljebb 100 betű hosszú. Időkorlát: 1 mp.

Értékelés: a pontok 30%-a kapható \(\displaystyle K=1\) esetén. A pontok további 30%-a kapható, ha \(\displaystyle N\le 100\).

Beküldendő egy s145.zip tömörített állományban a megfelelően dokumentált és kommentezett forrásprogram, amely tartalmazza a megoldás lépéseit, valamint megadja, hogy a program melyik fejlesztői környezetben futtatható.

(10 pont)

A beküldési határidő 2020. október 15-én LEJÁRT.


Horcsin Bálint megoldása:

Tároljuk egy \(\displaystyle map\)-ben vagy \(\displaystyle unordered\_map\)-ben azt, hogy egy adott szöveg hány \(\displaystyle elol_i\) -vel egyezik meg. És tároljuk minden \(\displaystyle i\)-re, hogy \(\displaystyle elol_i\overset{?}{=}hatul_i\).
Ezt követően nézzük végig az összes \(\displaystyle i\)-re, hogy \(\displaystyle hatul_i\) hány \(\displaystyle elol_j\)-vel egyezik meg, és ezek összegezzük, és vonjuk le azokat az eseteket, amire \(\displaystyle elol_i=hatul_i\).
Ha \(\displaystyle map\)-et használunk, akkor a futásidő: \(\displaystyle \mathcal{O}(N*logN*K)\)

Megjegyzés:

A feladat úgy is megoldható, hogy a szavak első és utolsó \(\displaystyle K\) karaktereiből két rendezett listát készítünk és ezeket párhuzamosan végignézzük. Ehhez így nem is kell fejlett adatszerkezet.


Statisztika:

18 dolgozat érkezett.
10 pontot kapott:Bertalan Dániel László, Horcsin Bálint, Németh Márton, Orosz Réka Ildikó, Szakács Ábel, Tóth 211 Bence, Varga 256 Péter.
9 pontot kapott:Szin Attila.
8 pontot kapott:1 versenyző.
6 pontot kapott:1 versenyző.
3 pontot kapott:4 versenyző.
2 pontot kapott:3 versenyző.
0 pontot kapott:1 versenyző.

A KöMaL 2020. szeptemberi informatika feladatai