前天报名了竞赛,结果今天迟到了几分钟,因为做核酸~~
今天的赛题感觉在设置上发生了一些变化,必须做完一道题才能进行下一题,我看到提示说提交以后不能再返回编辑了。那么真的是闯关的感觉,过一道关才能过下一关。难度有所增加,后面题目即使对前面题目有提示,也不能返回去完善了。个人觉得,这个比较符合竞赛的特点。
不知道是我的网络问题还是怎么样,我觉得今天得题目调试运行得特别慢。
今天的题目第一道题依旧很简单,小艺读书,就是给定一本书的页数和每天读的页数,问多少天可以读完。依旧是和ArrayList有关。奈何我每次都忘记ArrayList的长度该用什么函数,总是用length, 于是就报错,然而确实想不起来了,经过查询javdoc(好吧,我又作弊了)发现应该是ArrayList.size(),这次一定要记住。我其实觉得函数在一个语言里能不能大致统一一下,array就用length,ArrayList就用size,真的有必要吗? 简单一点一直用一种称呼不好吗?变来变去只会增加人类犯错误的机会。
从第二题开始我就不会了,恩,是真的不会。
第二题是连续子序列的最大权值, 哎,怎么说呢,我不理解连续子序列的意思,百度了一下,终于明白。最大权值就是子序列的元素之和最大。搞清楚题的意思,我就想啊,这个题用栈可好?然而我如果查文档,也断然不记得栈的实现方法,已经查了一次javadoc了,要不就别查第二次了吧~~
后来就用了特别朴素的想法实现了输出,当然结果是错的。我的想法是一个头指针,一个尾指针,从头开始走,负值不能做头元素,如果尾元素遇到负值就判断下一个元素是否为正且绝对值大于目前的尾元素,如果是,尾指针就继续先后走,如果不是就跳出循环,计算result。其实有没有处理好的地方,就是如果两个连续负值出现后,再出现连续的正值有可能会出现一个更大权值的连续子序列。
脑子里有一个想法,先求所有元素和,再求所有正值的和、所有负值的和,最后找一下负值分布最少的子序列~~但是求和的函数我完全不记得,自己写的话,感觉循环的数量会多,1000ms之内怕是保证不了。这么说吧,还是要整体把ArrayList再学习一下的。
第三题是组合数,哎,讲真,我还没有做过这样的题,数学角度看就是四种不同元素填满一个框的问题。我的数学真的不好,还得补习,新的任务,把数的组合复习一下。
第四题是小艺逃亡,纯数学问题,快11点了,我以为竞赛要结束了,草草交卷了。结果出来发现还有14分钟! 我猜应该是给我的迟到补时了,人性化啊,感谢!我居然没有享受,暴殄天物了,下次仔细看。
总的来说,比赛还是挺有意思的,至少可以发现自己的很多不足。