Corina are un text format din mai multe cuvinte separate între ele printr-un spațiu, pentru care trebuie să utilizeze cuvintele aflate pe poziţii consecutive. Se știe că pentru două cuvinte pe care le vom numi x
și y
:
- cuvântul
x=x[0]x[1]...x[n-1]
este prefix al cuvântuluiy=y[0]y[1]...y[m-1]
, dacăx[0]=y[0]
,x[1]= y[1]
,…,x[n-1]=y[n-1]
- cuvântul
x=x[0]x[1]...x[n-1]
este sufix al cuvântuluiy=y[0]y[1]...y[m-1]
, dacă există un indicei
, (0≤ i≤ m-1
), astfel încâtx[0]=y[i]
,x[1]= y[i+1]
,…,x[n-1]= y[m-1]
.
Cerința
Scrieţi un program care determină pentru un text dat, format din mai multe cuvinte separate între ele printr-un spațiu, două cerințe:
- cerința 1: câte perechi de cuvinte, notate
x
șiy
, aflate pe poziții consecutive în text au proprietatea:x
este sufix al luiy
saux
este prefix al luiy
. - cerința 2 : care este perechea de cuvinte, aflate pe poziții consecutive în text, care conține cele mai multe caractere.
Date de intrare
Fișierul de intrare cuvinte6.in
conține pe prima linie un text, format din mai multe cuvinte separate între ele printr-un spațiu și pe a doua linie conține un număr natural t
, care reprezintă cerința (dacă t=1
se va rezolva cerința 1, dacă t=2
se va rezolva cerința 2).
Date de ieșire
Fișierul de ieșire cuvinte6.out
va conține pe prima linie, pentru cerința 1, un număr natural, ce reprezintă numărul de perechi de cuvinte, notate x și y, aflate pe poziții consecutive în text care au proprietatea: x este sufix al lui y sau x este prefix al lui y.
Fișierul de ieșire cuvinte6.out
va conține pe prima linie, pentru cerința 2 două cuvinte, separate printr-un spațiu, ce reprezintă perechea de cuvinte, aflate pe poziții consecutive în text, care conține cele mai multe caractere.
Restricții și precizări
- Textul dat conține cel mult 500 de caractere
- Fiecare cuvânt din text este format numai din litere mici ale alfabetului englez
- Fiecare cuvânt din text conține cel puțin o literă și cel mult 20 de litere
- Pentru cerința 2, dacă textul dat are mai multe perechi de cuvinte, aflate pe poziții consecutive în text, care conțin cele mai multe caractere, se va afișa prima pereche din text, cu această proprietate.
Exemplul 1
cuvinte6.in
calcul calcule are care parcare corecte corectie 1
cuvinte6.out
3
Explicație
Cerința 1:
Corina are un text format din mai multe cuvinte separate între ele printr-un spațiu, pentru care trebuie să utilizeze cuvintele aflate pe poziţii consecutive. Se știe că pentru două cuvinte pe care le vom numi x
și y
:
- cuvântul
x=x[0]x[1]...x[n-1]
este prefix al cuvântuluiy=y[0]y[1]...y[m-1]
, dacăx[0]=y[0]
,x[1]= y[1]
,…,x[n-1]=y[n-1]
- cuvântul
x=x[0]x[1]...x[n-1]
este sufix al cuvântuluiy=y[0]y[1]...y[m-1]
, dacă există un indicei
, (0≤ i≤ m-1
), astfel încâtx[0]=y[i]
,x[1]= y[i+1]
,…,x[n-1]= y[m-1]
.
Cerința
Scrieţi un program care determină pentru un text dat, format din mai multe cuvinte separate între ele printr-un spațiu, două cerințe:
- cerința 1: câte perechi de cuvinte, notate
x
șiy
, aflate pe poziții consecutive în text au proprietatea:x
este sufix al luiy
saux
este prefix al luiy
. - cerința 2 : care este perechea de cuvinte, aflate pe poziții consecutive în text, care conține cele mai multe caractere.
Date de intrare
Fișierul de intrare cuvinte6.in
conține pe prima linie un text, format din mai multe cuvinte separate între ele printr-un spațiu și pe a doua linie conține un număr natural t
, care reprezintă cerința (dacă t=1
se va rezolva cerința 1, dacă t=2
se va rezolva cerința 2).
Date de ieșire
Fișierul de ieșire cuvinte6.out
va conține pe prima linie, pentru cerința 1, un număr natural, ce reprezintă numărul de perechi de cuvinte, notate x și y, aflate pe poziții consecutive în text care au proprietatea: x este sufix al lui y sau x este prefix al lui y.
Fișierul de ieșire cuvinte6.out
va conține pe prima linie, pentru cerința 2 două cuvinte, separate printr-un spațiu, ce reprezintă perechea de cuvinte, aflate pe poziții consecutive în text, care conține cele mai multe caractere.
Restricții și precizări
- Textul dat conține cel mult 500 de caractere
- Fiecare cuvânt din text este format numai din litere mici ale alfabetului englez
- Fiecare cuvânt din text conține cel puțin o literă și cel mult 20 de litere
- Pentru cerința 2, dacă textul dat are mai multe perechi de cuvinte, aflate pe poziții consecutive în text, care conțin cele mai multe caractere, se va afișa prima pereche din text, cu această proprietate.
Exemplul 1
cuvinte6.in
calcul calcule are care parcare corecte corectie 1
cuvinte6.out
3
Explicație
Cerința 1:
Textul conține 3
perechi de cuvinte : (calcul,calcule)
, (are,care)
, (care,parcare)
.
Exemplul 2
cuvinte6.in
calcul calcule are care parcare corecte corectie 2
cuvinte6.out
corecte corectie
Explicație
Cerința 2: Perechea de cuvinte corecte corectie
conține 14
caractere și reprezintă perechea cu cele mai multe caractere din text.
#include <bits/stdc++.h> using namespace std; ifstream cin("cuvinte6.in"); ofstream cout("cuvinte6.out"); int prefix(char a[] , char b[]) { int na = strlen(a); for(int i = 0 ; i < na ; i++) if(a[i] != b[i]) return 0; return 1; } int sufix(char a[] , char b[]) { int na = strlen(a) , nb = strlen(b); for(int i = na - 1 , j = nb - 1 ; i >= 0 ; i-- , j--) if(a[i] != b[j]) return 0; return 1; } int main() { char s[501] , *p , a[256][20]; int cer , cnt = 0 , cate = 0; cin.getline(s , 501); cin >> cer; p = strtok(s , " "); while(p != 0) { strcpy(a[++cnt] , p); p = strtok(NULL , " "); } if(cer == 1) { for(int i = 1 ; i < cnt ; i++) if(prefix(a[i], a[i + 1]) || sufix(a[i] , a[i + 1])) cate++; cout << cate; } else { char cuv1[256] , cuv2[256]; int maxi = 0; for(int i = 1 ; i < cnt ; i++) { if(strlen(a[i]) + strlen(a[i + 1]) > maxi) { maxi = strlen(a[i]) + strlen(a[i + 1]); strcpy(cuv1 , a[i]); strcpy(cuv2 , a[i + 1]); } } cout << cuv1 << " " << cuv2; } return 0; }