[CF补题计划DAY2]Educational Codeforces Round 127 (Rated for Div. 2)A~E
碎碎念
这场莫名简单,读E的时候觉得啊就这我也能做.jpg,不过实现上还是障碍颇多
感觉贴代码和总结题意都有点多余……单纯思路好了(懒)
A. String Building
\(2x+3y(x\ge 0,y\ge 0)\)可以得到除了\(1\)之外的所有正整数(证明似乎是万能的裴蜀定理),可以组成的字符串中不存在单独出现的a或b,遍历判断输出。
B. Consecutive Points Segment
间隔为1的数不用考虑,可以将间隔为1的数视作一个连通块,只考虑间隔大于2的情况。
-
显然,存在间隔为4及以上时,不可能使数组连通。
-
存在一个间隔为3,可以将左侧连通块整体右移,右侧连通块整体左移,显然存在两个及以上间隔为3时不可能使数组连通。
-
存在一个间隔为2,可以将左侧连通块右移或右侧连通块左移。存在两个间隔为2,可以中间连通块不动,左侧右移,右侧左移。存在三个及以上的间隔为2时不可能使数组连通。
存一下各种情况的个数,判断输出。
C. Dolce Vita
乱搞过的……单指针从后往前枚举,记录\(now\)天数和\(ans\)最大能买的个数,再来个前缀和……思路很乱,不知道肿么就过了。
D. Insert a Progression
记录一下数组最大值和最小值,插入在最小值和最大值之间的数是不用耗费额外代价的,\(ans\)记录原数组的绝对值差的总和,要求的就是\(ans+\)把\(1\)和\(k\)插入数组所耗费的额外代价(如果1和k需要额外插入的话),枚举插入点记录最小值即可。
注意特判一下最大值大于等于\(k\)和最小值小于等于\(1\)的情况,此时不需额外插入\(k\)或\(1\)。
E. Preorder
\(ans\)初始为1,\(dfs\)自下向上搜索,若左右子树相同,\(ans\)不变,若左右子树不同,\(ans=ans*2%mod\)。
难点在于如何判定左右子树是否相同,参了大佬的码在自底向上回溯的过程中可以交换子树的字符串将每棵子树的字典序都转为最小,直接暴力就可以……膜拜啊

浙公网安备 33010602011771号