#include <iostream> #include<unordered_map> #include<string> #include<deque> using namespace std; int main() { string s; unordered_map<string, int>mp; deque<string>dq; while (getline(cin, s)) { int pos, end = 0; string str = s.substr(s.find_last_of('\\') + 1); pos = str.find_last_of(' '); if (pos > 16) { str = str.substr(pos - 16); } if (mp.find(str) == mp.end())dq.push_back(str); ++mp[str];//if语句后不加花括号{}时,仅会执行紧随其后的第一条语句。 //如果`str`不在map中:1. mp[str]会插入`str`,并将其值初始化为`0`;2. 然后`++`操作将该值增加为`1`。 //如果`str`已经在map中:直接将其值加1。 if (dq.size() > 8)dq.pop_front(); } for (auto i : dq) { cout << i << " " << mp[i] << endl; } } // 64 位输出请用 printf("%lld")