2016级新生周赛(六)题解
A、题目里说Simple学长每天都要喝一定量的咖啡,但是没说是什么时间买,所以可以记录一下在第i天之前咖啡最便宜的时候的价格,就相当于在低价的时候储存一些供后面的天喝。代码链接 http://paste.ubuntu.com/23588422/B、题意是一步可以跳1或2或3或4或5个距离,问你最少用多少步跳到x,只用判断x能不能整除5就行了,因为每一步尽量要跳的远嘛。代码链接 http://paste.ubuntu.com/23588431/C、让你求区间值的和,但是n很大,询问的次数也比较多,这就要动一下脑筋,可以用一个数组存下1到i的值,这样求l,r区间内的和就是sum[r]-sum[l-1]了。奥,忘了说这题设置一点小小的坑,就是每一大组数据后要额外加一个空行(不要打我~)代码链接 http://paste.ubuntu.com/23588436/D、有两个箱子,他们中的咖啡数是a,b,那么他们合并所需的体力就是ab,要求把n个箱子合并成一个,问最少要花的体力,观察一下就会发现如果要花体力最少的话,应该每次都找两个咖啡数量最少的两个合并,这样总的体力才会最小,所以每次只需找到最小的两个,然后合并成一个箱子,直到只有一个箱子为止。(话说这题本来想加组数据卡快排的,结果忘了,就让某些同学用快排怼过去了,真是失误。。。)代码链接 http://paste.ubuntu.com/23588462/E、这是一个经典的求方法的题目,如果你明白了斐波那契数列,那么这题你就可以做出来了。我们可以用f[i]表示走到第i阶楼梯的方法数,那么有哪几阶楼梯可以跳到第i阶呢?很显然是i-1,i-2,i-3阶,那么走到第i阶的方法数就等于走到第i-1,i-2,i-3阶方法数之和。知道这个后,预处理出来1到40阶的方法数,就可以了。代码链接 http://paste.ubuntu.com/23588482/F、这题本来想让用的方法是对大数取模,但因为是6比较特殊,所以有些同学用特殊方法就解决了,判断大数是偶数并且各个位上的和是3的倍数。下面我们来说一下正解:一般我们求123对6取余的值只需要用123%6就可以了,但是如果前面那个数很大的话,就不能这样做了。如果123是一个很大的数,我们现在要求他模6的值,可以这么做1%6=1(1102)%6=0(0103)%6=3这样就算出来123%6的值是3了。在这题里判断出余数为0就可以了。代码链接 http://paste.ubuntu.com/23588510/G、这题只要对字符串用类似冒泡排序的方法排序,再对数字用冒泡排序,然后输出就可以了代码链接 http://paste.ubuntu.com/23588516/