242
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