#719
Minime
Pentru a putea ţine evidenţa mai uşor, administratorul unui magazin întocmeşte o listă cu produsele care se găsesc în magazin la începutul zilei. El scrie numele produselor, folosind cuvinte de aceeaşi lungime, formate doar din literele mici ale alfabetului englez. Îndată finalizată lista, el îi asociază un cod reprezentând cel mai mic cuvânt în sens lexicografic, obţinut prin preluarea unei litere din fiecare nume de produs, în ordinea în care acestea au fost scrise pe listă.
El observă că acest cod poate fi obţinut în mai multe moduri. Doreşte însă să identifice varianta în care literele alese sunt cât mai apropiate, altfel spus, distanţa, reprezentând numărul de poziţii, între poziţia cea mai mică şi poziţia cea mai mare pe care sunt plasate caracterele alese, este minimă. De exemplu:
Pentru lista care cuprinde produsele de mai jos:
c | a | i | e | t |
l | a | p | t | e |
m | i | e | r | e |
c | a | f | e | a |
Codul asociat este: aaea
O variantă de obţinere în care distanţa este 4
. Poziţia literei a
din al doilea cuvânt este 2
iar a lui e
, ales în al treilea cuvânt este 5
:
c | a |
i | e | t |
l | a |
p | t | e |
m | i | e | r | e |
c | a |
f | e | a |
Varianta optimă este caracterizată de distanţa 2
. deoarece, poziţia minimă a unui caracter ales este 2
iar cea maximă este 3
:
c | a |
i | e | t |
l | a |
p | t | e |
m | i | e |
r | e |
c | a |
f | e | a |
Scrieţi un program care să determine codul asociat listei de produse şi distanţa minimă prin care poate fi obţinut.
Lot Juniori, Resita, 2012
Problema | Minime | Operații I/O |
minime.in /minime.out
|
---|---|---|---|
Limita timp | 0.6 secunde | Limita memorie |
Total: 4 MB
/
Stivă 2 MB
|
Id soluție | #40885619 | Utilizator | |
Fișier | minime.cpp | Dimensiune | 968 B |
Data încărcării | 31 Decembrie 2022, 15:48 | Scor / rezultat | 100 puncte |
minime.cpp: In function 'int main()': minime.cpp:25:9: warning: 'char* gets(char*)' is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations] gets(A); ^ minime.cpp:25:15: warning: 'char* gets(char*)' is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations] gets(A); ^ minime.cpp:15:35: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result] freopen("minime.in","r",stdin); ^ minime.cpp:16:37: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result] freopen("minime.out","w",stdout); ^ minime.cpp:18:29: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result] scanf("%d %d\n", &N, &M); ^ minime.cpp:25:16: warning: ignoring return value of 'char* gets(char*)', declared with attribute warn_unused_result [-Wunused-result] gets(A); ^ /tmp/ccwcN7wu.o: In function \`main': minime.cpp:(.text.startup+0xda): warning: the \`gets' function is dangerous and should not be used.
Test | Timp | Mesaj evaluare | Scor posibil | Scor obținut | ||
---|---|---|---|---|---|---|
1 | 0 secunde | OK. | 10 | 10 | ||
2 | 0 secunde | OK. | 10 | 10 | ||
3 | 0.004 secunde | OK. | 10 | 10 | ||
4 | 0.004 secunde | OK. | 10 | 10 | ||
5 | 0.004 secunde | OK. | 10 | 10 | ||
6 | 0.012 secunde | OK. | 10 | 10 | ||
7 | 0.064 secunde | OK. | 10 | 10 | ||
8 | 0.06 secunde | OK. | 10 | 10 | ||
9 | 0.064 secunde | OK. | 10 | 10 | ||
10 | 0.076 secunde | OK. | 10 | 10 | ||
Punctaj total | 100 |
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema Minime face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:
Suma punctajelor acordate pe testele utilizate pentru verificare este 100. Astfel, soluția ta poate obține cel mult 100 de puncte, caz în care se poate considera corectă.