👤

După ce au mers împreună prin lume, Păcală și Tândală au strâns o căruță plină de bănuți de aur, iar acum îi răstoarnă pe toți în curtea casei și îi împart în N grămezi. Păcală numără bănuții din fiecare grămadă și îi dictează lui Tândală N numere naturale pe care acesta trebuie să le scrie în ordine pe o tăbliță. După ore bune de muncă, Păcală constată că Tândală a scris pe un singur rând, în ordine, de la stânga la dreapta, toate numerele dictate de el, dar lipite unul de altul. Acum pe tăbliță e doar un șir lung de cifre. Ce să facă Păcală acum?

Cerința
Cunoscând cele N numere naturale dictate de Păcală, scrieți un program care să determine:
1. numărul cifrelor scrise pe tăbliță de Tândală;
2. ce-a de-a K-a cifră de pe tăbliță, în ordine de la stânga la dreapta;
3. cel mai mare număr ce se poate forma cu exact P cifre alăturate de pe tăbliță, considerate în ordine de la stânga la dreapta.

Date de intrare
Fișierul de intrare aur.in conţine:
- pe prima linie un număr natural C care reprezintă numărul cerinței și poate avea valorile 1, 2 sau 3.
- pe cea de-a doua linie un număr natural N dacă cerința este 1, sau două numere naturale N și K (despărțite printr-un spațiu) dacă cerința este 2, sau două numere naturale N și P (despărțite printr-un spațiu) dacă cerința este 3.
- pe cea de-a treia linie, N numere naturale despărțite prin câte un spațiu, ce reprezintă, în ordine, numerele pe care Păcală i le dictează lui Tândală.

Date de ieșire
Fișierul de ieșire aur.out va conține pe prima linie un singur număr natural ce reprezintă rezultatul determinat conform fiecărei cerințe.

Restricții și precizări
1 ≤ N ≤ 100.000 și 1 ≤ K ≤ 900.000;
Se garantează ca există cel puțin K cifre scrise pe tăbliță.
1 ≤ P ≤ 18; Se garantează ca există cel puțin P cifre scrise pe tăbliță.
toate numere dictate de Păcală sunt nenule și au cel mult 9 cifre fiecare;
Pentru rezolvarea corectă a primei cerințe se acordă 20 de puncte, pentru rezolvarea corectă a celei de-a doua cerințe se acordă 30 de puncte, iar pentru rezolvarea corectă a celei de-a treia cerințe se acordă 40 de puncte.
În concurs s-au acordat 10 puncte din oficiu. Aici se acordă pentru exemplele din enunț.
Exemplul 1:
aur.in

1
7
25 9 13 459 2 79 9
aur.out

12
Explicație
Se rezolvă cerința 1. Tândală a scris pe tăbliță: 259134592799. Numărul cifrelor scrise de Tândală este 12.

Exemplul 2:
aur.in

2
7 10
25 9 13 459 2 79 9
aur.out

7
Explicație
Se rezolvă cerința 2. N are valoarea 7 și K are valoarea 10. Pe tăbliță este scris: 259134592799, cea de-a zecea cifră este 7.

Exemplul 3:
aur.in

3
7 4
25 9 13 459 2 79 9
aur.out

9279
Explicație
Se rezolvă cerința 3. N are valoarea 7 și P are valoarea 4. Tândală a scris pe tăbliță: 259134592799. Cel mai mare număr format din patru cifre este 9279.


Răspuns :

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("aur.in");

ofstream g("aur.out");

long long  i, j, n, num, m, nrcif, z, rez3;

int k, p,rez1;

short c, cifre[900005], rez2, cif;

int main()

{

   f >> c;

   if (c==1)

   {

       f>>n;

       for (i=1; i<=n; ++i)

       {

           f >> num;

           nrcif=1;

           while (num>9)

           {

               ++nrcif;

               num=num/10;

           }

           rez1=rez1+nrcif;

       }

       g << rez1;

   }

   else

   {

       if (c==2)

       {

           f>> n >> k;

           for (i=1; i<=n; ++i)

           {

               f>>num;

               m=num; z=1; nrcif=1;

               while (num>9)

               {

                   z=z*10; num=num/10;

                   ++nrcif;

               }

               num=m;

               while (nrcif)

               {

                   cif=num/z;

                   ++j; cifre[j]=cif;

                   if (j==k) {rez2=cif;}

                   num=num%z; z=z/10;

                   --nrcif;

               }

           }

          g << rez2;

       }

       else

       {

           int p;

           f >>n>>p;

           for (i=1; i<=n; ++i)

           {

               f>>num;

               m=num, z=1; nrcif=1;

               while (num>9)

               {

                   z=z*10; num=num/10;

                   ++nrcif;

               }

               num=m;

               while (nrcif)

               {

                   cif=num/z;

                   ++j; cifre[j]=cif;

                   num=num%z; z=z/10;

                   --nrcif;

               }

           }

          n=j; rez3=0;

          for (i=1; i<=n-p+1; ++i)

          {

              num=0;

              for (j=i; j<=i+p-1; ++j)

                 { num=num*10+cifre[j];}

              if (num>rez3) rez3=num;

          }

          g << rez3;

       }

   }

}