本次训练赛相较于前两次难度上升许多,涉及到了动态规划等算法。为了图方便,会使用部分c++语法,但不影响整体阅读。
大意:给定n,如果n是奇数就乘3加一,是偶数就除2,一直循环,直到n变成1为止,并输出n的每个变化。
基础模拟题,使用while循环处理n,处理后直接输出,以n==1为终止条件。
题目大意:给定一个数字n,算出有多少个数的三次方小于n。
111 = 1 222 = 8333 = 27 444 = 64555 = 125 但是 125 > 100
本题刘老师提供了一种“投机取巧”的方法,之所以需要投机取巧,根本上是整数类型存储有限,long long类型的上限只有264 左右,远不及题目要求的1028 ,而double类型可以取更大的值(21024),但是double类型是有精度范围的(15位~16位),也就是说在1015 之后,会有精度缺失的问题。严格意义上来讲,如果发生精度缺失的话,是没法解决问题的,但好在数据没有卡double,使用double类型能通过。因此把这种使用double的方法称之为“投机”。
大意:给定n个不同的数,每次交换两个数,求得到递增序列的最小次数。
每个数都有它本来该去的地方,现在从前到后,把每个数送到它该去的地方。
例如序列4 2 1 5 3
数字4对应第四个位置,把4和5做交换得到序列5 2 1 4 3,以此类推得到3 2 1 4 5 --->1 2 3 4 5
有一直线型展台共有 m 个展位,按该展位离入口处的远近顺序编号,其编号分别为 1、2、……、m;其中只有 n 个是展示新技术的展位,最后一个展示新技术的展位编号为 m。这次调研分两个小组进行,每个小组最多调研连续的 10 个展位,且每个小组调研的展位至少相隔 2 个展位。乐乐希望你设计一种安排方案,使领导调研更多的展示新技术的展位
本题使用动态规划算法。
思路:枚举区间两个端点时间复杂度为O(n^2),一定超时。转换思路根据等差数列求和公式(a1+an)*n / 2 = m , 转换为a1=m / n + 1 / 2 - n / 2 ,枚举n的值,判断a1是否为整数,时间复杂度为O(n),依旧超时,需要继续优化。我们从1开始枚举,需要确定上界,设a1=1,变换得\(\sqrt{2}\)得到n的最大值