PAT真题(C/C++)——1047:Shopping in Mars

在这里插入图片描述
这道题遇到的问题和上一道相同,都是超时。
最初我是用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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值