牛客周赛97文字版题解
写在前面
找不到从代码错误可以留言评论区,出题人会给出解答。
这样简单的周赛你喜欢喵?
A.回文串
若三个字母存在两个及其以上相等,那么就可以把字母放在首尾构成一个回文串。
若三个字母互不相同,则无法构成回文串。
B.2025
把给定的数字 的数位拆解出来并累成得到乘积,然后将其根号转为int类型再平方看是否得到原数。
值得注意的是,判断一个数是不是完全平方数,不能采用 的方式,因为其存在浮点误差。
C.移动
显然对于每次移动,需要把询问区间中最左边和最右边
的障碍都找出来,这样答案便是
,若区间不存在障碍答案则是
。对于每次询问若采用暴力遍历则是
,无法通过,我们可以采用链表的方式,维护对于任意的
前面第一个障碍的位置和后面第一个障碍的位置,这样预处理
,单次回答
。
需要特别注意的是 可能存在
的情况。
D.字符串操作
由于字典序的性质,若要使得字符串的字典序最大,即操作第一个不为字母 z 的位置 ,将其操作为 z 的次数记作
,那么遍历
后面的所有位置,考虑当前
若满足操作
次后能变大,则继续操作,否则停止即可。
E.平衡排列
对于一个长度为 的排列,其总和为
。
若 为奇数,那么必然不能分成两个部分使得总和相等,输出 -1。
若 为偶数:遍历
,若当前
则放左边,同时
,否则
放右边。
F. 小苯的序列分段
首先是无解情况,对于 的前缀和
的后缀若存在大于它本身的,则无解,例如:
4 2
4 3 2 1
3 1
4 2
4 1 2 3
4 2
我们记 表示数字
在
中存在的位置,显然要存在有解情况必然满足
。
我们考虑 和
, 有多少个
满足
且
,记作
。
这边便能得到 。答案便是
的乘积。