Balaurul Arhirel se decide să înveţe biologie, aşa că doreşte să cumpere manualul de clasa a X-a. Din păcate, acesta nu se mai găsește pe piaţă, dar Balaurul reuşeşte să găsească o copie la un prieten. După ce începe să citească, Balaurul Arhirel observă că există greşeli în copia prietenului, iar într-un impuls de energie, se hotărăşte să corecteze manualul. El are la dispoziţie un dicţionar de M
cuvinte dintre care trebuie să extragă variante pentru cuvântul greşit. Asupra cuvântului greşit balaurul poate să facă următoarele schimbări în așa fel încât acesta să ajungă la o variantă din dicționar:
– poate șterge o literă;
– poate insera o literă;
– poate schimba o literă în altă literă.
Totuși, Balaurul Arhirel este leneş, aşa că nu doreşte să opereze mai mult de K
schimbări în cuvântul greșit pentru a-l aduce la o formă corectă (existentă în dicționar).
Cerința
Ajutaţi-l pe Balaurul Arhirel să afle care dintre cuvintele din dicţionar ar putea fi variante ale cuvântului greşit.
Date de intrare
Fișierul de intrare cuvinte8.in
conţine pe prima linie cele două numere M
şi K
, separate printr-un spaţiu, reprezentând numărul de cuvinte din dicţionar şi numărul maxim de modificări ce pot fi efectuate asupra cuvântului ce trebuie corectat. Pe a doua linie se găsesc separate printr-un spaţiu lungimea cuvântului greşit, L[cuvânt]
, şi cuvântul greşit. Pe următoarele M
linii se găsesc cuvintele din dicţionar, câte un cuvânt pe o linie în forma următoare: pe linia i
lungimea L[i-2]
a cuvântului i-2
, separată printr-un singur spaţiu de cuvântul i-2
.
Date de ieșire
Fișierul de ieșire cuvinte8.out
va conţine M
linii. Pe linia i
se află valoarea 1
pentru cazul în care cuvântul i
din dicţionar este o variantă pentru cuvântul greşit dat, respectiv valoarea 0
în caz contrar.
Restricții și precizări
0 < M < 21
0 < K < 31
0 < lungimea oricărui cuvânt (inclusiv cel greșit) < 10001
- Cuvintele sunt formate doar din literele alfabetului latin, iar literele mici diferă de cele mari (de exemplu,
Z
nu este acelaşi lucru cuz
).
Exemplu
cuvinte8.in
6 2 6 radiux 5 ladin 6 Radius 6 ridica 5 radio 6 adipos 5 cadiu
cuvinte8.out
0 1 0 1 0 1
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema cuvinte8:
#include <cstdio>
#include <cstring>
#define NMAX 10000
#define KMAX 30
#define min(a,b) (((a) < (b)) ? a : b)
#define max(a,b) (((a) > (b)) ? a : b)
#define INF 667
using namespace std;
int A[2][NMAX+KMAX];
int M, K, L1, L2;
char s1[NMAX+KMAX+1], s2[NMAX+KMAX+1];
int main()
{
int t, i, j, v = 0, n = 1, pl;
freopen("cuvinte8.in","r",stdin);
scanf("%d %d", &M, &K);
scanf("%d %s", &L1, s1+1);
freopen("cuvinte8.out","w",stdout);
for (t = 0; t < M; t++)
{
scanf("%d %s", &L2, s2+1);
for (i = 0; i <= K; i++)
A[v][i] = i;
A[v][K+1] = INF;
for (i = 1; i <= L2; i++)
{
pl = min(i+K+2, L1+1);
if (i-K-2 >= 0)
A[n][i-K-2] = INF;
else
A[n][0] = i;
for (j = max(1, i-K-1); j < pl; j++)
if (s1[j] == s2[i])
A[n][j] = A[v][j-1];
else
{
A[n][j] = min(A[v][j],A[v][j-1]);
A[n][j] = min(A[n][j],A[n][j-1]) + 1;
}
A[n][pl] = INF;
v ^= 1; n ^= 1;
}
printf("%d\n",(A[v][L1]<=K));
}
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2426 cuvinte8
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2426 cuvinte8 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!