题目 个人难度 T1 红 T2 红 T3 红 T4 橙 T5 灰 T6 橙
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T1
可以使用 reverse 函数进行字符串的反转操作。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T2
> 最多一次交换自己的相邻两个卡片
我们另开一个字符串,直接模拟每种交换情况即可。
注意判断不交换两个字符串相等的情况。(这里挂了两发)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T3
纯大模拟,@wcqk的最爱,没啥好说的。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
T4
我的思路是这样的
我们先计算出数组 aaa 中元素的累加值,因为新的数组 bbb 是由数组 aaa 无限复制得到的,我们可以计算出在经过了 kkk 轮复制粘贴后,还需要加多少才可以超过 xxx,最后输出 k×n+sumk\times n+sumk×n+sum,其中 sumsumsum 为在经过 kkk 轮的粘贴后,按照数组顺序还需要相加的元素个数。
注意特判。
T5
赛时没想出来,随便用 map 胡了 12pts12pts12pts
T6
当时查了一个全排列函数 next_permutation,我们根据这个把数字的所有排列情况生成出来,在生成所有的分割情况,然后挨个判断就行。注意要写 do-while 循环(我也不知道为啥,反正查出来要这么用,怪我知识面浅了)。
注意在计算分割区间为 [1,l],[l+1,n][1,l],[l+1,n][1,l],[l+1,n] 的时候将他从大到小排列,这样计算出来的结果是最大的。同时记得判断分割后数都为 000 的情况。