#include<iostream>
#include<vector>
#include<unordered_map>
#include<string>
#include<queue>
#include<utility>
using namespace std;
// 按照`\`分隔字符串,获得数组
vector<string> split(string str, char c){
vector<string> res;
string temp;
for(auto i: str){
if(i==c){
res.push_back(temp);
temp.clear();
}else{
temp+=i;
}
}
res.push_back(temp);
return res;
}
int main(){
string str;
int length;
// 临时保存split结果
vector<string> vec;
// 保存所有不一样的字符串
vector<string> hold;
unordered_map<string, int> res;
// 存入结果
queue<pair<string, int> >que;
while(cin >> str >> length){
vec = split(str, '\\');
string last = vec.back();
if(last.size()>16){
last = last.substr(last.size()-16);
}
string ss = last + " " + to_string(length);
++res[ss];
bool flag = false;
// 如果之前已有就不存
for(auto item: hold) if(item.compare(ss)==0) {flag = true; break;}
if(!flag) hold.push_back(ss);
}
int begin=hold.size()>8?hold.size()-8:0;
for(int i=begin;i<hold.size();i++)
que.emplace(hold[i], res[hold[i]]);
while(!que.empty()){
cout << que.front().first << " " << que.front().second << endl;
que.pop();
}
return 0;
}可以优化一下,其实不用queue也可以,原本用这个是想实时更新队列,后来发现不行...

京公网安备 11010502036488号