#include <iostream>
using namespace std;
#include <string>
#include <sstream>
#include <map>
int main()
{
string str;
string err;
string num;
multimap<string, int> errCountMap;
string errRecord[8];
string numRecord[8];
int i = 0;
while (getline(cin, str))
{
istringstream is1(str);
while (getline(is1, err, '\\'))
;
istringstream errIs(err);
getline(errIs, err, ' ');
getline(errIs, num);
if (err.length() > 16)
{
err.erase(0, err.length() - 16);
}
if (errCountMap.count(err + num) == 0)
{
errRecord[i % 8] = err;
numRecord[i % 8] = num;
errCountMap.insert(pair<string, int>(err + num, 0));
}
else
{
errCountMap.insert(pair<string, int>(err + num, 0));
i--;
}
i++;
}
if (i > 7)
{
for (int j = i % 8; j <= 7; j++)
{
cout << errRecord[j] << " " << numRecord[j] << " " << errCountMap.count(errRecord[j] + numRecord[j]) << endl;
}
for (int j = 0; j < i % 8; j++)
{
cout << errRecord[j] << " " << numRecord[j] << " " << errCountMap.count(errRecord[j] + numRecord[j]) << endl;
}
}
else
{
for (int j = 0; j < i; j++)
{
cout << errRecord[j] << " " << numRecord[j] << " " << errCountMap.count(errRecord[j] + numRecord[j]) << endl;
}
}
}
感觉像是脱裤子放屁的一道题。
要注意的是,即使你存了1个新错误,其他错误的出现时间依然是有效的,所以这个所谓的只存8个就是个笑话,实际上内存还得保留之前错误的出现信息。
用好sstream提供的c++风格流,做好输入读取,注意‘\’这个特殊符号的输入要用'\\'转义输入。
再使用multimap进行计数,这个支持重复的map计数真好用,可以减少很多代码。
注意一下输出,它也是按错误时间输出的,需要在输出处进行一点修改,也可以换一种数据结构先,总之要满足先进先出,这里我大意了。

京公网安备 11010502036488号