Scrabble (jocul cuvintelor) este un joc în care participanții formează cuvinte prin plasarea de litere pe orizontală sau pe verticală, iar punctajul obținut este cu atât mai mare cu cât literele folosite sunt mai rare (mai valoroase).
Vă propunem un altfel de scrabble, joc unde jucătorul primește n
piese speciale de scrabble. Astfel, fiecare piesă are inscripționate două litere mari ale alfabetului englez A...Z
, una dintre litere fiind consoană, cealaltă fiind vocală. Jucătorul poate forma cuvinte prin alăturarea pieselor pe orizontală.
Un cuvânt este considerat valid dacă respectă următoarele condiții:
- folosește cel puțin două piese;
- cuvântul format nu conține pe poziții consecutive litere egale sau litere de același tip (vocale/consoane).
Cuvântul este cu atât mai valoros cu cât folosește mai multe piese de scrabble.
Cerința
Să se determine cuvântul de lungime maximă care se poate forma cu cele n
piese. Dacă sunt mai multe cuvinte de lungime maximă atunci se va afișa cel mai mare lexicografic alfabetic.
Date de intrare
Fișierul de intrare scrabble.in
conține pe prima linie numărul n
, iar pe următoarele n
linii descrierea pieselor de scrabble sub forma a două caractere literă mare ale alfabetului englez.
Date de ieșire
Fișierul de ieșire scrabble.out
va conține pe prima linie cuvântul de lungime maximă format.
Restricții și precizări
1 ≤ n ≤ 18
- nu există piese identice
- piesele nu se pot roti
- sunt considerate vocale caracterele:
AEIOU
- lungimea maximă a unui cuvânt format nu poate depăși
10
piese
Exemplu
scrabble.in
6 AB EC BE BA CA AC
scrabble.out
ECACAB
Explicație
Sunt mai multe cuvinte cu număr maxim de piese (3
) care se pot forma:
ABECAC
, ABACEC
, ECABAC
, ECACAB
, BEBACA
,…
Dintre acestea cel maxim lexicografic generat este: ECACAB
.
#include <bits/stdc++.h> using namespace std; #define mod 1234567 ifstream cin("scrabble.in"); ofstream cout("scrabble.out"); int n , nv , nc; char s[3] , v[20][3] , c[20][3] , voc[] = "AEIOU"; void ord(char a[][3] , int n) { for(int i = 1 ; i <= n ; i++) for(int j = i + 1 ; j <= n ; j++) if(strcmp(a[i] , a[j]) < 0) { char aux[3]; strcpy(aux , a[i]); strcpy(a[i] , a[j]); strcpy(a[j] , aux); } } int main() { cin >> n; for(int i = 1 ; i <= n ; i++) { cin >> s; if(strchr(voc , s[0])) strcpy(v[++nv] , s); else strcpy(c[++nc] , s); } ord(v , nv); ord(c , nc); if(nc < nv) for(int i = 1 ; i <= nv ; i++) cout << v[i]; else if(nv < nc) for(int i = 1 ; i <= nc ; i++) cout << c[i]; else if(c[1][0] < v[1][0]) for(int i = 1 ; i <=nv ; i++) cout << v[i]; else for(int i = 1 ; i <= nc ; i++) cout << c[i]; }