我是如是做的:
(1)分词,找出那几个关键字;
(2)建立一个容器:map<string, map<int, int>> count; 其中第一个string为要统计的关键字,第二个map关键字为年份;
      所以,统计就如下:count["计算机"][2016] ++;
     取值:   count["xxx"][year]
大致如上。

第二题:
   就写了一下接口,把任意删除的思路写了一下;
   其中接口采用POSA2中的thread_safe interface模式实现,减少锁的开锁,防止自我死锁;
   删除任意值的想法是:首先堆的底层数据结构为一个vector,当要删除一个元素时,把这个元素与vector中最后一个有效元素交换,同时有效元素个数减1;因为交换了元素,所以,要重新调整从删除元素开始以下的元素,时间复杂度为logn。

第三题:
   这一题主要还是哈希做法,但在这里,因为省份是固定的,数量并不是很多,可以采用直接查询的方式。
   如:
   int getHashCode(string province) {
           if (province == "北京")
                 return 1;
        ......
    }

这样可以得到省份对应的hashCode,这里自由发挥,也可以用Map

邮费分两种,一种是默认,一种是特殊的,所以我定义了一个结构体:
struct PostFee{
     uint32_t default_fee;
     uint32_t special_fee;
     bool flag;                   //标志特殊邮费
};
####注意内存对齐,当时没考虑。。。。。

那么所有省份的邮费列表如下:
PostFee g_province_postfee[MAX_SIZE];其中,下标就代表省份的hashCode。

所以,取得一个省份的邮费可以这样:
uint32_t getPostFee(uint8_t *storage, int size, string province) {
       //合法性检测;

       int hashCode = getHashCode(province);
       //hashCode合法性检测
      
       if ( g_province_postfee[hashCode].flag ) {
                return  g_province_postfee[hashCode].special_fee;
       }

       return  g_province_postfee[hashCode].default_fee;
}

就写了这么点东西,自由发挥吧,想多了都是多余的,本就是问答题,略过了相当多的细节。
后面还有很多笔试呢,大家加油啊!!