fbpx

Problema #985 – cifre11 – Rezolvari PBInfo

0

Cerința

Se dau n numere naturale. Se cer următoarele:

a) Determinați cel mai mare dintre numerele date care are suma cifrelor minimă.

b) Aflați cel mai mic număr dintre numerele date care are în scrierea sa un număr maxim de cifre consecutive (de exemplu 25613 are în scrierea sa un număr maxim de 3 cifre consecutive:1,2,3).

c) Aflați cifra comună cât mai multor numere din șir. Dacă sunt mai multe asemenea cifre se vor afișa toate în ordine crescătoare.

Date de intrare

Fișierul de intrare cifre11.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații.

Date de ieșire

Fișierul de ieșire cifre11.out va conține pe prima linie cel mai mare număr din șir cu suma cifrelor minimă, pe a doua linie cel mai mic număr cu număr maxim de cifre consecutive în scrierea sa, iar pe a treia linie cifrele ce apar în scrierea a cât mai multor numere din șir, separate prin spațiu .

Restricții și precizări

  • 1 ≤ n ≤ 10000
  • numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 2.000.000.000
  • cele 3 cerințe vor primi punctaje astfel: a) 40% b) 30% c) 30%.

Exemplu

cifre11.in

5
23 1047 531 100013 8729

cifre11.out

100013
8279
1 3

Explicație

Două numere au suma cifrelor 5 (minimă) iar cel mai mare dintre ele este 100013. Numărul 8729 are în scrierea sa 3 cifre consecutive:7,8,9. Cifrele 1 și 3 apar fiecare în scrierea a 3 numere.

#include <bits/stdc++.h>
#include<algorithm>
using namespace std;

ofstream cout("cifre11.out");
ifstream cin("cifre11.in");

struct cifra
{
    int nr,s,nrc;
};cifra S[10001];

int comp(cifra a , cifra b){return a.s < b.s || (a.s == b.s && a.nr > b.nr);}

int cmp(cifra a , cifra b){return a.nrc > b.nrc || (a.nrc == b.nrc && a.nr < b.nr);}

int n , f[10001] , q[10001];

int main()
{
   cin >> n;
   for(int i = 1 ; i <= n ; i++)
   {
        cin >> S[i].nr;
        int g[10001] = {0};
        int aux = S[i].nr , s1 = 0 , ct = 0;
        while(aux) s1 += aux % 10 , f[aux%10]++ , g[aux%10]++ , aux /= 10;
        int maxim = -1;
        for(int j = 0 ; j <= 10 ; j++)
        {
            if(g[j] > 0) ct++ , q[j]++;
            else
            {
                if(ct > maxim) maxim = ct;
                ct = 0;
            }
        }
        S[i].nrc = maxim;
        S[i].s = s1;
   }
    sort(S + 1, S + n + 1 , comp);
    cout << S[1].nr << endl;
    sort(S + 1, S + n + 1, cmp);
    cout << S[1].nr << endl;
    int maxi = -1;
    for(int i = 0 ; i <= 9 ; i++)
        if(q[i] > maxi) maxi = q[i];
    
     for(int i = 0 ; i <= 9 ; i++)
        if(q[i] == maxi) cout << i << " ";


}
Comentarii
Se incarca comentariile...

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More