java 26行较短写法不容易出错,坑点:循环输出的顺序指的是第一次插入的循序而不是最后一次使用,使用linkedhashmap有序插入特征,使用bufferedreader比scanner较快输入
运行时间:16ms
占用内存:9596k

import java.io.*;
import java.util.*;
public class 简单错误记录linked{
    public static void main(String[] args) throws IOException{
        BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
        Map<String,Integer> m=new LinkedHashMap<String,Integer>();
        String tstr=null;
        while((tstr = cin.readLine()) != null && !tstr.equals("")){      //&& !tstr.equals(""))没有性能影响
            String[] str=tstr.split("\\s+");
            String fname=str[0].substring(str[0].lastIndexOf("\\")+1);
            fname=fname.substring(Math.max(fname.length()-16 ,0))+" "+str[1];  //max 最快推荐 ?:也可以 if太麻烦
            Integer tmp=m.get(fname);  //get==null较快写法
            if(tmp==null)
                m.put(fname,1);
            else
                m.put(fname, tmp+1);
        }
        int cnt=0;
        for(Map.Entry<String,Integer> it:m.entrySet()){
            if(m.size()-cnt<=8)
                System.out.println(it.getKey()+" "+it.getValue());
            cnt++;
        }
    }
}
/*
运行时间:45ms
占用内存:10772k

v3 改用bufferedReader
运行时间:18ms
占用内存:9600k
v4 split \\ 改为 lastIndexOf("\\")+1
运行时间:16ms
占用内存:9596k
* */