#1056
Unific
Se consideră un şir A=(A
1
, A
2
, ..., A
N
)
, format din N
numere naturale nenule. Două numere se consideră vecine dacă se află pe poziţii alăturate (A
i
are ca vecini pe A
i-1
şi A
i+1
, pentru orice 1<i<N
, A
1
are ca vecin doar pe A
2
, iar A
N
are ca vecin doar pe A
N-1
).
Dacă două elemente vecine A
i
, A
i+1
(1≤i<N
) au cel puţin o cifră comună, ele se pot unifica. Procedeul de unificare constă în eliminarea din numerele A
i
şi A
i+1
a tuturor cifrelor comune şi adăugarea prin alipirea numărului obţinut din A
i+1
la numărul obţinut din A
i
, formându-se astfel un nou număr. Numărul A
i
va fi înlocuit cu noul număr, iar numărul A
i+1
va fi eliminat din şir.
De exemplu, numerele A
i
=23814
şi A
i+1
=40273
au cifrele 2
, 3
, 4
comune, după unificare obţinem A
i
=817
, iar A
i+1
este eliminat; observaţi că dacă după eliminarea cifrelor comune, numerele încep cu zerouri nesemnificative, acestea vor fi eliminate, apoi se realizează alipirea.
Dacă în urma eliminării cifrelor comune, unul dintre numere nu mai are cifre, atunci numărul rezultat va avea cifrele rămase în celălalt. Dacă în urma eliminării cifrelor comune atât A
i
cât şi A
i+1
nu mai au cifre, atunci ambele numere vor fi eliminate din şir, fără a fi înlocuite cu o altă valoare.
Ordinea în care se fac unificările în şir este importantă: la fiecare pas se alege prima pereche de elemente vecine A
i
A
i+1
care poate fi unificată, considerând şirul parcurs de la stânga la dreapta. (De exemplu, considerând A
i
=123
, A
i+1
=234
, A
i+2
=235
, se unifică A
i
cu A
i+1
=> A
i
=14
, iar unificarea cu următorul număr nu mai este posibilă).
Cunoscându-se şirul celor N
numere naturale, să se determine:
a) cifra care apare cel mai frecvent în scrierea tuturor celor N
numere; dacă există mai multe cifre cu aceeaşi frecvenţă de apariţie maximă, se va reţine cea mai mică cifră.
b) şirul obţinut prin efectuarea unui număr maxim de unificări, după regulile descrise în enunţ.
Problema | Unific | Operații I/O |
unific.in /unific.out
|
---|---|---|---|
Limita timp | 1 secunde | Limita memorie |
Total: 2 MB
/
Stivă 1 MB
|
Id soluție | #42701409 | Utilizator | |
Fișier | unific.cpp | Dimensiune | 1.66 KB |
Data încărcării | 14 Martie 2023, 23:05 | Scor / rezultat | 41 puncte |
unific.cpp: In function 'std::string unific(std::string, std::string)': unific.cpp:8:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(j=0; j<a.size(); j++) M[a[j]-'0']=1; ^ unific.cpp:9:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(j=0; j<b.size(); j++) M1[b[j]-'0']=1; ^ unific.cpp:11:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(j=0; j<a.size(); j++){ ^ unific.cpp:14:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(j=0; j<b.size(); j++){ ^ unific.cpp:18:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(j=0; j<nr.size(); j++){ ^ unific.cpp:19:54: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if(nr[j]!='0' || (nr[j]=='0' && j+1==nr.size())) nr1+=nr[j]; ^ unific.cpp: In function 'int verif(std::string, std::string)': unific.cpp:25:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(j=0; j<a.size(); j++) M[a[j]-'0']=1; ^ unific.cpp:26:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(j=0; j<b.size(); j++) M1[b[j]-'0']=1; ^ unific.cpp: In function 'int main()': unific.cpp:40:33: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int j1=0; j1<s.size(); j1++) M2[s[j1]-'0']++; ^ unific.cpp:60:13: warning: 'raspuns' may be used uninitialized in this function [-Wmaybe-uninitialized] cout << raspuns << "\n" << l << "\n"; ^
Test | Timp | Mesaj evaluare | Scor posibil | Scor obținut | ||
---|---|---|---|---|---|---|
1 | 0 secunde | Corect! | 10 | 10 | ||
2 | 0 secunde | Corect! | 10 | 10 | ||
3 | 0 secunde | Sir incorect | 10 | 1 | ||
4 | 0 secunde | Corect! | 10 | 10 | ||
5 | 0 secunde | Caught fatal signal 11 | 10 | 0 | ||
6 | 0 secunde | Caught fatal signal 11 | 10 | 0 | ||
7 | 0.108 secunde | Corect! | 10 | 10 | ||
8 | 0 secunde | Caught fatal signal 11 | 10 | 0 | ||
9 | 0.004 secunde | Caught fatal signal 11 | 10 | 0 | ||
10 | 0 secunde | Caught fatal signal 11 | 10 | 0 | ||
Punctaj total | 41 |
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema Unific 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ă.