2958 {
2959 int n;
2960 cin >> n;
2961 unordered_map<string, school> schools;
2962 for(int i = 0; i < n; i++) {
2963 string id;
2964 string sc;
2965 int score;
2966 cin >> id >> score >> sc;
2967 stringstream ss;
2968 for(char ch: sc) {
2969 ss << static_cast<char>(tolower(ch));
2970 }
2971 sc = ss.str();
2972 if(!schools.contains(sc)) {
2973 schools[sc] = school(sc);
2974 }
2975 schools[sc].count++;
2976 switch(id[0]) {
2977 case 'A':
2978 schools[sc].a_sum += score;
2979 break;
2980 case 'B':
2981 schools[sc].b_sum += score;
2982 break;
2983 case 'T':
2984 schools[sc].t_sum += score;
2985 break;
2986 default: return 1;
2987 }
2988 }
2990 vec.reserve(schools.size());
2991 for(const auto &[id, sc]: schools) {
2993 }
2994 sort(
vec.rbegin(),
vec.rend());
2995 unordered_map<int, int> score_rank;
2996 for(
int i =
vec.size() - 1; i >= 0; i--) {
2997 score_rank[
vec[i].get_score()] = i + 1;
2998 }
2999 cout <<
vec.size() << endl;
3000 for(
int i = 0; i <
vec.size(); i++) {
3001 const auto &sc =
vec[i];
3002 cout << score_rank[sc.get_score()] << ' ' << sc.id << ' ' << sc.get_score() << ' ' << sc.count << endl;
3003 }
3004 return 0;
3005 }