Cerința
Gigel se joacă cu cuvinte (scrise cu litere din alfabetul englez, mari sau mici). El a asociat fiecărei litere din alfabet o valoare număr natural, pe care a numit-o valoarea literei. Apoi a definit valoarea unui cuvânt astfel: se calculează suma S1
a valorilor literelor mici din cuvânt şi suma S2
a valorilor literelor mari din cuvânt. Valoarea cuvântului va fi S1 - S2
.
Cunoscându-se valoarea fiecărei litere din alfabet şi o listă de cuvinte, să se determine cuvântul cu valoarea maximă. Dacă există mai multe cuvinte de valoare maximă, se vor determina toate, în ordinea din lista dată.
Date de intrare
Fișierul de intrare valori.in
conține pe prima linie numărul 26
de numere, reprezentând, în ordine, valorile literelor din alfabet, pe a doua linie numărul de cuvinte n
iar pe următoarele n
linii câte un cuvânt format din litere mari şi mici ale alfabetului englez.
Date de ieșire
Fișierul de ieșire valori.out
va conține cuvintele de valoare maximă din lista dată, în ordinea din listă, fiecare cuvânt pe câte o linie.
Restricții și precizări
- valorile literelor sunt numere naturale mai mici decât
1000
1 ≤ n ≤ 1000
- fiecare dintre cuvintele date conţine cel mult
255
caractere
Exemplu
valori.in
2 7 7 3 9 8 9 6 3 9 6 6 6 5 5 8 2 6 6 1 5 6 9 4 7 3 4 BaciL AbAc Aba AbEcEdAr
valori.out
AbAc
Observaţie
Valoarea unui cuvânt poate fi negativă. De exemplu, valoarea cuvântului BaciL
este (2+7+3)-(7+6)=-1
#include <bits/stdc++.h> using namespace std; ifstream cin("valori.in"); ofstream cout("valori.out"); int vec[30]; char m[1001][1001]; int main() { for(int i = 0 ; i < 26 ; ++i) cin >> vec[i]; int n; cin >> n; int max = -1000000; for(int f = 1 ; f <= n ; ++f) { char s[501]; cin >> s; int i = 0; int s1=0 , s2=0; while(s[i]!='\0') { if(s[i]>='A' && s[i]<='Z') s1+=vec[(int)s[i]-65]; else s2+=vec[(int)s[i]-97]; i++; } if(s2-s1>max) max=s2-s1; strcpy(m[f] , s); } for(int f = 1 ; f <= n ; ++f) { char s[501]; strcpy(s , m[f]); int i = 0; int s1=0 , s2=0; while(s[i]!='\0') { if(s[i]>='A' && s[i]<='Z') s1+=vec[(int)s[i]-65]; else s2+=vec[(int)s[i]-97]; i++; } if(s2-s1==max) cout << s << endl; } return 0; }