- Petrică are n cartonaşe cu numere naturale distincte. El vrea să găsească cel mai mare număr care se poate forma prin unirea a două cartonaşe diferite. Două cartonaşe se pot uni dacă primul cartonaş se termină cu cifra cu care începe al doilea cartonaş. Ajutaţi-l pe Petrică să găsească numărul dorit.
Petrică are n=5 cartonaşe
2393 1963 1971 120 34
Cel mai mare număr care se poate forma este 19711963
Date de intrare
Fişierul de intrare NUMAR.IN conţine pe prima linie numărul de cartonaşe n, iar pe a doua linie n valori naturale reprezentând numerele de pe cele n cartonaşe. Valorile de pe linia a doua sunt separate prin câte un spaţiu.
Date de ieşire
Fişierul de ieşire NUMAR.OUT conţine cel mai mare număr care se poate forma prin unirea a două cartonaşe astfel încât al doilea cartonaş începe cu cifra cu care se termină primul cartonaş. Dacă nu există soluţie atunci se afişează 0.
Restricţii şi precizări
• 2 ≤ n≤ 10000, n număr natural
• Numerele de pe cartonaşe sunt numere naturale cu valori mai mici sau egale cu 20000.
Exemple
NUMAR.IN
5
2393 1963 1971 120 34
NUMAR.OUT
19711963
Explicaţie
Se unesc cartonaşele ce conţin numerele 1971 şi 1963
NUMAR.IN
2
456 89
NUMAR.OUT
0
Explicaţie
Cele două cartonaşe nu se pot uni în modul cerut de problemă
Timp maxim de execuţie/test : 1 secundă
Am reusit sa rezolv aceasta problema dar 4 dintre teste depasesc timpul de executie.
- #include<iostream>
- #include<fstream>
- using namespace std;
- int putere(int nrcif)
- {
- int i,m=1;
- for(i=1; i<nrcif; i++)
- m = m * 10;
- return m;
- }
- int main()
- {
- long long i,n,j,v[10000],max=0,nrcif=0,x,c,n1,n2;
- ifstream f("numar.in");
- ofstream g("numar.out");
- f>>n;
- for(i=1; i<=n; i++)
- f>>v[i];
- //REZOLVARE
- for(i=1; i<=n; i++)
- {
- for(j=1; j<=n; j++)
- {
- x = v[j];
- while(x != 0)
- {
- x=x/10;
- nrcif++;
- }
- c = putere(nrcif);
- if(v[i] % 10 == v[j] / c && i != j)
- {
- if(v[i] + v[j] > max)
- {
- max = v[i] + v[j];
- n1 = v[i];
- n2 = v[j];
- }
- }
- nrcif=0;
- }
- }
- if(max == 0)
- g<<0;
- else
- g<<n1<<n2;
- f.close();
- g.close();
- return 0;
- }
Imi puteti da niste sfaturi ca sa mai reduc din cod si sa functioneze mai repede varog frumos?
Welcome to BitCell. Click here to register !
