类似华为16年题,可参考,下为代码修改,思想不变。

#include <iostream>
#include<bits/stdc++.h>
#include<string>
#include<algorithm>
using namespace std;

struct file {
    string name;
    int row;
    int num;
};

vector<file> f;

string filenameall(string s) {
    string temp ="";
    for(int i = s.size() - 1; i >= 0; i--) {
        if(s[i] != '\\') {
            temp += s[i];
        } else break;
    }
    reverse(temp.begin(), temp.end());
    return temp;
}

int isin(file x) {
    for(int i = 0; i < f.size(); i++) {
        if(x.name == f[i].name && x.row == f[i].row) return i;
    }
    return -1;
}

bool cmp(file a, file b) {
    return a.num > b.num;
}

int main()
{
    string s;
    //freopen("1.txt", "r", stdin);
    while(cin >> s) {
        int k;
        file temp;
        scanf("%d", &k);
        //system("pause");
        temp.name = filenameall(s);
        temp.row = k;
        int index = isin(temp);
        if(index != -1) {
            f[index].num++;
            //cout << f[index].name << " " << f[index].row << " " << f[index].num << endl;
            //system("pause");
        } else {
            temp.num = 1;
            f.push_back(temp);
            //cout << temp.name << " " << temp.row << " " << temp.num << endl;
            //system("pause");
        }
    }
    sort(f.begin(), f.end(), cmp);
    for(int i = 0; i < f.size(); i++) {
        //cout << f[i].name << " " << f[i].row << " " << f[i].num << endl;
    }


    for(int i = 0; i < f.size(); i++) {
        if(i == 8) break;
        string temm;
        if(f[i].name.size() > 16) temm = f[i].name.substr(f[i].name.size() - 16, 16);
        else temm = f[i].name;
        cout << temm << " " << f[i].row << " " << f[i].num << endl;
    }
    return 0;
}