309
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