fbpx

Problema #853 – Cadouri – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Elevii clasei a X-a s-au implicat în strângerea de cadouri pentru Crăciun. Fiecare elev a adus mai multe cadouri, și a trimis prin email șefului clasei o urare, însoțită de lista cadourilor. Fiecare email are forma:

Exemplu

cadouri.in

3
La multi ani! 4 papusi, 15 ciocolate , 20 sosete.
Sarbatori fericite :) ! 3 ciocolate , 10 biscuiti, 5 papusi
Salut. 2 ciocolate , 1 papusi. 1 ciocolate!

cadouri.out

4
ciocolate 21
sosete 20
biscuiti 10
papusi 10
#include <bits/stdc++.h>


using namespace std;

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

map <string , int> M;
char s[1001];

bool nr(char ch)
{
    return ch >= '0' && ch <= '9';
}

bool lit(char ch)
{
    return (ch >='a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
}

int main()
{
    int n;
    cin >> n;
    cin.get();
    for(int k = 1 ; k <= n ; ++k)
    {
        cin.getline(s , 1000);
        int i = 0;
        int num = 0;
        while(s[i]!='\0')
        {
            while(nr(s[i]))
            {
                num=num*10+(int)s[i]-48;
                i++;
            }
            if(num)
            {
            while(!lit(s[i]) && num)
                i++;
            if(lit(s[i]) && num)
            {
                int j = 0;
                char ch[255];
                while(lit(s[i]) && s[i])
                {
                    ch[j]=s[i];
                    j++;
                    i++;
                }
                ch[j]='\0';
                string p = ch;
                M[p]+=num;
                num=0;
            }
            i--;
            }
            i++;
        }
    }
    int cnt = 0;
    for(auto x:M)
        cnt++;
    cout << cnt << endl;
    int v[1001] , p = 0;
    for(auto x:M)
    {
        v[p] = x.second;
        p++;
    }
    sort(v , v+p);
    for(int i = p-1 ; i >= 0 ; --i)
    {
        for(auto x:M)
        {
            if(x.second == v[i])
            {
                cout << x.first << ' ' << x.second << '\n';
                M[x.first]=-1;
                break;
            }
        }
    }
    return 0;
}
Comentarii

S-ar putea sa iti placa