#include <iostream>
#include <utility>
#include <vector>
using namespace std;
int main() {
    int n;
    while (cin >> n) {
        vector<pair<int, int>> data(n);
        for (int i = 0; i < n; i++) {
            cin >> data[i].first >> data[i].second;
        }
        int i = 0;
        int sum = 0, num = 0;
        while (i < n) {
            int pos = i;
            int cnt = 0, sum10 = 0, candidate = 0;
            // 嵌套循环,寻找处于同一个 set 的元素
            while (pos < n && data[pos].first == data[i].first) {
                // 如果元素的值小于等于10,更新备选值
                // 如果元素的值大于10,更新数量以及和
                if (data[pos].second <= 10) {
                    candidate = max(candidate, data[pos].second);
                } else {
                    sum10 += data[pos].second;
                    cnt++;
                }
                // 寻找下一个位置
                pos++;
            }
            // 如果大于10的元素数量存在,计算sum值
            if (cnt > 0) {
                sum += sum10 - ((cnt - 1) * 10);
                num += cnt;
            } else {
                sum += candidate;
                num += 1;
            }
            // 将第一层循环移至第二层循环的位置
            i = pos;
        }
        cout << sum << " " << num << endl;
    }
    return 0;
}

时间复杂度:O(n),只遍历了一次数组

空间复杂度:O(n),存储数据