牛客网acm模式需要自己写输入输出么 牛客网acm模式

hello大家好呀,我是小楼。

上周参加了一个区的程序员技能比赛的初赛,其实就是算法比赛,虽然最后结果是过了初赛,但过程真是一言难尽啊。

这次的算法比赛和ACM非常类似,虽然我大学是数学专业,虽然大学也修过ACM这门课,但是我的算法是真的不行,很菜很菜的那种。

牛客网acm模式需要自己写输入输出么 牛客网acm模式

好在这次比赛是组(抱大腿)队模式,3人一组,3个小时时间,一共7道算法题,1入门,2简单,2中等,2困难。

10分钟写出入门题,但…

由于我知道我比较菜,所以比赛一开始,我就挑了一个看起来最简单的题目做,难题交给队友。

结果是3个小时过去,这个看起来最简单的题目,愣是没有做出来,下面就结合这道题讲讲我的心路历程。

这道题的描述是这样的:

牛客网acm模式需要自己写输入输出么 牛客网acm模式

看起来文字很多,其实要表达的很简单,就是输入一些成绩,每个成绩输进去时,如果超过全班最好成绩则输出prefect,如果超过自己的最好成绩则输出great,如果没超过自己最好成绩则输出bad。

是不是很简单?用一个max变量保存全班最好成绩,用一个map保存每个人的最好成绩,不就解决了吗?

不过这是我第一次用这个oj系统,连用户都是刚注册的,所以我还特地看了一会输入输出的demo,这次比赛只能使用ACM的输入输出模式,例如如果用的是Go语言,输入输出应该是这样:

牛客网acm模式需要自己写输入输出么 牛客网acm模式

当一些key存入map时,会先对key计算hash值,在map中找到对应的hash槽,这个槽之后一般是个链表(有的语言也会做一些优化成树状,这里我们简化为链表),因为不同的key的hash值可能会重复(冲突),冲突了只能把key排成一个链表,每次查找时都要遍历链表。

所以有没有可能,设计者给出了一堆hash值重复的name,数量又多,导致每次插入、查找时都要遍历链表,性能下降,导致超时?

于是再仔细审题,我发现输入的姓名和成绩是有限制的:

name保证长度不超过6,仅由小写英文字母组成,每个名字代表唯一一个同学

x为1位小数,0≤x≤300

name最长为6,且为小写字母,这点给了我一点启发,能不能让查询map变成O(1)复杂度?

显然可以的,小写字母范围为a~z,如果看成数字就是1-26,也就是27进制,所以每个name可以表示为一个27进制的数,这样就可以把所有人的成绩放到一个大数组里去,按name的27进制进行O(1)的查找。

为什么是27进制而不是26,因为name没说是多少位,比如只有5位,那空出的一位怎么表示?只能用0表示了,a-z就是1-26,合起来是27进制。

参考10进制计算法则,27进制应该这样计算(以roshi为例):

牛客网acm模式需要自己写输入输出么 牛客网acm模式

结果竟然报错了,我当时不理解,事后理解了,我们暂且不说,后面会说到原因。

就是因为这个报错不明不白,明明能测试通过,到底哪里理解有偏差?亦或是内存超了?

优化内存占用

上面的代码用到了2个数组,一个存最大值,一个存值是否存在,一个数组是1513361KB,2个就是3026722KB,是最大内存限制的5.7倍

var scores [387420488]int32var exist [387420488]int32

exist数组可以用boolean类型,分数最大值0<=0<=300,int16足矣

大小 范围 int8 1字节 -128 ~ 127 int16 2字节 -32768 ~ 32767 int32 4字节 -2147483648 ~ 2147483647

如果是这个组合,将占用 1135020KB,是上限的2倍多,还是有点超,先试试:

牛客网acm模式需要自己写输入输出么 牛客网acm模式

还是一样,难道是我算法有问题?没道理啊。到这里我实在是没招了,3小时也耗尽了,比赛结束。

赛后思考

赛后,我拿着这道题去找了一位刚入职字节的朋友,想着刚去字节应该刷过不少题吧,果然大佬就是大佬,给出了一个有新意的思路,用前缀树做:

牛客网acm模式需要自己写输入输出么 牛客网acm模式
最后

过程虽然曲折,但最终还是解决了这个入门题,而且还尝试着用几种方法来解,虽然不尽如人意,但终究还是有点收获。

当然我们组的小伙伴也很给力,做出来3道题,我们最终的成绩是排名进了前10%,虽然我只贡献了一点点(没完全做出来也有得分,按通过的用例算,我这题大概拿到了90%的分),也算是可以了,而且还有一道题也可能是因为这个输入被卡了,所以如果这两道卡的题都做出来,估计排名能进前三。

初赛算是过了,接下来准备复赛,如果复赛还有好玩的事情,我再来写一篇文章,哈哈。

这一言难尽的比赛,大家给个赞鼓励下吧。

搜索关注”捉虫大师”,后端技术分享,架构设计、性能优化、源码阅读、问题排查、踩坑实践。

本文来自投稿,不代表展天博客立场,如若转载,请注明出处:https://www.me900.com/174214.html

赞 (0)

相关推荐

  • 送外卖和送快递哪个好?

    现如今,大家都发现了外卖和快递这两个行业都发展很不错,而且这两个行业没有什么技术含量,也不需要很高的学历,所以这两个行业就业人口也是很多的,那么送外卖和送快递哪个好?两者的区别在哪?小编带大家来了解一下吧。 送外卖和送快递哪个好? 先说快件员吧,这可不是吃鸡里的快件员,而是现实中的一个职业,她们的任务是把夜晚到货的全市快件逐一配送到顾客手里。 也是电商里惟一…

    2023-03-06
  • 炒什么币最挣钱?还是持续赚点小钱吧

    昨天我朋友给我发了个信息,说是炒币亏惨了,一下回到解放前了。 我也不知道他是炒的什么币,说是跟做过山车一样,准备起身跑路的时候,好像是火币拔网线了,没办法交易~ 好像很多人都在组织维权,群里都是骂娘的,说:火币这么大交易所也有“老鼠仓”? 其实炒币,在17年高位的时候,我是体验过的,买了十几万七七八八的币,后来归零的归零,暴跌的暴跌,唯独留了一点点比特币,放…

    2021-07-13
  • 抖音老照片修复项目,日赚1000的项目赚钱方法

    抖音老照片修复项目,日赚1000的项目赚钱方法抖音老照片修复项目,日赚1000的项目赚钱方法抖音老照片修复项目,日赚1000的项目赚钱方法抖音老照片修复项目,日赚1000的项目赚钱方法

    今天给大家分享一个抖音小众项目,这个项目很早就有人操作了。这个项目适合个人操作也可以做团队矩阵玩法,但是需求量还是可以的,那就是老照片修复项目,我也是在刷抖音的时候无意中刷到的视频。就把这个项目拆解了一下,发现是几乎没有任何门槛的。 这是原图和修复好的图片对比,除了修复原图还可以做成动态的视频。目前做的好的,我看已经用矩阵在做了20个左右的账号,因为老照片修…

    2021-06-09 • 创业杂谈
  • 烘焙行业的发展与创新,面包店加盟店投资分析

    随着烘焙行业的发展,加入这个行业的投资者也越来越多,但是对于一些初创者来说会比较纠结是要自己开好还是加盟好,这个问题并没有一个标准的答案,可以说各有各的优势吧!如果是选择自己开店这几点就需要注意了: 1、赤字经营 开店最怕的就是持续性的赤字经营,如果一家店投入了大量人力物力后,还长时间处于亏损状态,就需要看是哪里出来问题了,日常经营除了要看每日销售数据,分析…

    2023-06-08
  • 一个新手怎么开网店,如何寻找细分市场营销

    我一直强调的一点就是,面对竞争激烈的市场,我们要走差异化的路线,要用品牌思维来做电商。 那么做品牌,第一个要解决的问题就是确定目标市场。而目前的电商环境中,很多类目都是一片红海,在政策的鼓舞下,大批创业者进入电商领域淘金,而流量增长却进入瓶颈。在这样的环境中,如何找到一个更适合切入的市场就变成了一件十分重要的事情。 你要面临两个选择:做细分类目里面的顶部冠军…

    2023-07-19
  • 动画短视频制作(动画短视频制作公司)

    动画短视频制作(动画短视频制作公司)动画短视频制作(动画短视频制作公司)动画短视频制作(动画短视频制作公司)动画短视频制作(动画短视频制作公司)

    前期文章中会说到图片怎么改成gif动画,这期为大家讲解视频怎么改成gif动画?在实际工作中,我们会用发现文章中加视频体积太大,影响文章的加载速度,或者是大家看到好玩的视频,想做成表情包,其实动态表情包就是gif动画,在制作的原理上都是一样的,有这些需求的小伙伴,或者单纯的想学习一下视频变gif动画的,都可以看小意写的文章教程! 有的小伙伴会要求用pr操作,其…

    2023-05-25 • 创业杂谈
  • 洗衣店利润好吗,投资干洗店有前景吗

    现在市场上发展火爆的项目,服务行业可以说占据了大壁江山,其它都是一些小众的行业。在日常生活中干洗店随处可见,市场需求是非常广泛的,作为服务行业的一种也得到了大批投资者的青睐。那么投资开干洗店行业好不好做? 随着时代的不同和社会的发展,人们对服装的品质和质量的要求越来越高,越来越多的人追求高品质,高质量的服装,同时,对于品牌服饰,洗涤的要求也是相当高的,传统的…

    2023-07-25
  • 好养的宠物猫好养的宠物,五种适合懒人喂养的宠物

    快节奏的城市生活越来越快,人们的压力越来越大,每天朝九晚五的工作生活让人身心疲惫。由于工作的情况,城市里忙碌的人们没时间发展社交,一个人难免会有些孤独。 宠物则是陪伴我们的最佳选择。上班已经够累了,甚至有一些加班族工作更忙,更累,没时间再去做另外的事情,哪还有其他的精力去做其他事情呢。 不过懒人也有自己喂养宠物的方式,下面我给大家介绍五种适合懒人喂养的宠物,…

    2023-02-20
  • 饭店装修效果图片大全,餐饮店面装修要求

    如果没有餐馆装修的经验,可能会问是否麻烦?那今天我们就来说说餐馆装修需要考虑哪些问题?餐馆装修不光要考虑餐馆的电路装修、墙面装修、地面装修以及吊顶安装的问题,还需要提前考虑好餐厅的装修风格,装修色彩,软装搭配等等问题,具体要怎么弄呢?下面跟跟小编一起来看下吧. 餐馆装修首先要考虑的是,餐厅的装修风格,因为对于餐厅来说装饰和设计是一件非常繁杂的事情,但是俗话说…

    2023-07-25
  • 餐饮项目,中式餐饮的特点主要从哪方面体现

    有道是“民以食为天”,美味佳肴和灯红酒绿,既能刺激味蕾又能抓住眼球,舌尖上的享受始终拨动着饕餮族的每一根神经。 但是,兴盛几千年的中餐在未来五年中极有可能会遇到颠覆性的变化。应对这种变化,希望本文能够对于广大中餐从业者有所启迪,有所帮助。 一、中式餐饮的优势和短板 中餐在烹饪形式上,“煎炒烹炸炖”难以说得完全;在食材选用上,“畜禽虫草花”难以涵盖全部;在口味…

    2023-07-27
  • 怎么刷下拉框?刷百度搜狗下拉框有什么用?

    我之前在分享过一个刷下拉框赚钱的副业项目,主要针对一些冷门项目帮别人刷下拉框赚钱的。 或许很多朋友还不清楚下拉框是什么东西,先简单给你解释一下。 刷下拉框有什么用? 一般我们去搜索框搜索的时候搜索框都会弹出下拉框,例如下图。 你试想一下,你是不是经常搜索的时候也会点击下拉框里面的关键词? 刷下拉框的目的一般都是为自己的营销产品提高展现曝光。 而且基本上只要有…

    2021-01-01
  • 极速互联怎么样 极速互联**使用方法

    极速互联是一款能够让用户获得畅快互联体验的**,它通过优化网络路径,降低延迟和抖动来提高网络传输速度。相信很多人都对这款软件感到好奇,下面将为大家详细介绍极速互联怎么样,以及极速互联**使用方法。 首先,让我们来了解一下极速互联怎么样。极速互联是一款针对互联网用户的优化软件,它可以帮助用户优化网络传输和网络环境,提高网络体验。在使用极速互联后,用户不仅可以获…

    2023-05-23