这道题遇到的问题和上一道相同,都是超时。
最初我是用set数组,根据课程,按序存放每个学生的名字,学生名字使用string存放,这样做就导致了超时,然后把set换成了vector,并编写了名字排序的比较函数,每一个课程都自行进行一次名字排序,依然超时,再然后把string换成了char数组,继续超时,最后的最后,把名字存放在一个数组里,用数组下标代替名字,最后成功AC。
那么,为什么换成了数组下标就能成功AC呢?
我的分析是,在进行排序的时候,如果排序的对象是字符串,那么换位置的开销是巨大的,而整形数则大幅降低了开销。
在刷题时,也就是总结出了以下几点用于衡量效率:
- cin低效, scanf高效;
- string低效, char *高效;
- set低效,vector+sort高效;(特定情况下还可以用unordered_map替代map以提高效率)
- 字符串排序低效, 常数排序高效;
最后的代码如下:
#include <iostream>
#include <vector>
#include <string.h>
#include <algorithm>
using namespace std;
ch