CF EDU 169

CF EDU 169

A

  • 题意:

    一条线上给定 n 个点,询问是否能新插入一个点,使得这个点是距离这 n 个点都是最近的

  • 题解:

    n > 2 n > 2 n>2 时,无解

    n = 2 n = 2 n=2 时,直接插入到这两个点中间即可

B

  • 题意:

    总共 n n n 个房间,第 i i i 个房间与第 i + 1 i+1 i+1 个房间中间有一扇门,假如 A A A 可能在 [ l , r ] [l, r] [l,r] 中任意一个房间, B B B 在 [ L , R ] [L, R] [L,R] 中任意一个房间,最少需要关闭几扇门才能保证两人不可能见面

  • 题解:

    如果两人所在区间不相交的话,关闭 1 扇门即可

    如果两人可能所在区间相交的话,相交区间的所有门必须关闭,最后判断一下边界即可

C

  • 题意:

    AliceBob 取数字,Alice 先手,Alice 取到的数字和为 ABob 取到的数字和为 BAlice 想最大化 A-BBob 想最小化 A-B,在游戏开始前 Bob 可以增大任意数字,但是总增加量不能超过 k,求 A-B 的最小值

  • 题解:

    每个人都尽量取剩下的最大的数字

    将数组排序,模拟取数字的过程,将最后结果减去 k 即可

    当有偶数个数字的时候,A-B 的最小值不会小于 0,奇数个数字的时候,A-B 的最小值不会小于原先所有数字的最小值

D

  • 题意:

    总共有四种颜色的门,每个城市会有两扇不同颜色的门,其中城市 ij 如果具有相同颜色的门,他们之间是互相可以到达的,所花费的价值是 ∣ i − j ∣ |i-j| ∣i−j∣,每次询问城市 x x x 去 y y y 所花费的最小花费是多少

  • 题解:

    若 x x x 和 y y y 具有相同颜色的门,最小花费就是 ∣ x − y ∣ |x-y| ∣x−y∣

    否则枚举所有与 x x x 和 y y y 不一样的情况,找到 x x x 右边第一个满足条件的门和 y y y 左边第一个满足条件的门,直接处理即可

  • code

E

  • 题意:

    取石子游戏,若一堆石子有 x 个,只能从中取出 y 个,其中 gcd(x, y) 必须等于 1。给定多堆石子,第 i 堆有 a i a_i ai 个石子,问先手和后手谁能赢

  • 题解:

    SG函数

    考虑处理出来每个 a i a_i ai 的 S G \rm SG SG 值。

    考虑 S G i \rm SG_i SGi,若 i i i 是质数,可以取任意 [ 1 , i − 1 ] [1, i-1] [1,i−1] 个石子,所以 S G i = m a x { S G j } + 1 SG_i=max\{SG_j\}+1 SGi=max{SGj}+1

    若 i i i 不是质数,对于 i i i 的最小质因数 p p p, p p p 的所有倍数都取不到,因此 S G i = S G p + 1 SG_i = SG_p + 1 SGi=SGp+1

    之后直接用 S G \rm SG SG 定理即可

F

  • 题意:

    给定一个数组 A,每次可以进行一下两种操作

    1. 用 A i + A i + 1 A_i+A_{i+1} Ai+Ai+1 替换 A i A_i Ai 和 A i + 1 A_{i+1} Ai+1
    2. 将 A i A_i Ai 拆成两个数字的和并替换掉 A i A_i Ai

    f ( A ) f(A) f(A) 表示让 A A A 数组变成回文数组的最小次数,求 ∑ 1 ≤ l ≤ r ≤ n ( A [ l : r ] ) \sum\limits_{1\le l \le r \le n}(A[l:r]) 1≤l≤r≤n∑(A[l:r])

  • 题解:

    对于一个长度为 n n n 的数组,最坏情况是用 n − 1 n-1 n−1 次操作将其变成回文

    但是对于某一个数组 A A A,取其一个前缀和一个后缀,若这两个子段和相等,可以减少一次操作

    令 f l , r f_{l, r} fl,r 表示 A [ l : r ] A[l:r] A[l:r] 的最少操作次数,考虑 dp,最优情况一定是:

    f l , r = min ⁡ { f L , R + ( L − l ) + ( r − R ) } f_{l,r}=\min\{f_{L,R}+(L-l)+(r-R)\} fl,r=min{fL,R+(L−l)+(r−R)}

    也就是 f l , r + l − r = min ⁡ { f L , R + L − R } f_{l,r}+l-r=\min\{f_{L,R}+L-R\} fl,r+l−r=min{fL,R+L−R}

    其中 ∑ i = L l A i = ∑ i = R r A i \sum\limits_{i=L}^l A_i = \sum\limits_{i=R}^r A_i i=L∑lAi=i=R∑rAi

    对 A A A 做前缀和 s u m sum sum,转移条件变为:

    s u m l − s u m L − 1 = s u m r − s u m R − 1 sum_l-sum_{L-1}=sum_r-sum_{R-1} suml−sumL−1=sumr−sumR−1,

    也就是 s u m r − s u m l = s u m R − 1 − s u m L − 1 sum_r-sum_l=sum_{R-1}-sum_{L-1} sumr−suml=sumR−1−sumL−1

    开一个桶 D D D,有 f l , r + l − r = D [ s u m r − s u m l ] f_{l,r}+l-r=D[sum_r-sum_l] fl,r+l−r=D[sumr−suml],每次转移完 f l , r f_{l,r} fl,r 后,更新 D [ s u m r − 1 − s u m l − 1 ] D[sum_{r-1}-sum_{l-1}] D[sumr−1−suml−1] 即可

  • code

G

  • 题意:

    给定一个又数字组成的字符串 s s s,可以将其划分乘偶数个非空子串 s i s_i si,会以一下规则构成新字符串 t t t:

    • 依次对于每个 j ≤ i 2 j\le \frac{i}{2} j≤2i,将 s 2 × j s_{2\times j} s2×j 个 s 2 × j − 1 s_{2\times j - 1} s2×j−1 拼接到 t t t 后面( s i s_i si 下标从 1 1 1 开始)

    给定 n n n 和 k k k,对于 s s s 中每个长度为 k k k 的字串,求出其以上述方法生成的 t t t 的最小长度

  • 题解:

    单独考虑一个字串 s s s,发现划分后所有的 s 2 × j − 1 s_{2\times j-1} s2×j−1 的长度一定为 1 1 1

    令 f i , j f_{i,j} fi,j 表示考虑到第 i i i 位,现在所填写的子串要重复 j j j 次,这种情况的最小长度,有

    f i , j = f i − 1 , j + j f_{i,j}=f_{i-1,j}+j fi,j=fi−1,j+j

    f i , s i − 1 = min ⁡ { f i , s i − 1 , f i − 2 , k + s i − 1 } f_{i, s_{i-1}} = \min\{f_{i,s_{i-1}},f_{i-2,k}+s_{i-1}\} fi,si−1=min{fi,si−1,fi−2,k+si−1}

    考虑广义矩阵乘法,令 f i , 10 f_{i,10} fi,10 表示考虑到第 i i i 位,并且要更新 j j j 的值(也就是上面转移的第二种情况)

    因为要求多个子数组的答案,直接双指针就行

  • code

相关推荐
XH华20 分钟前
初识C语言之二维数组(下)
c语言·算法
南宫生42 分钟前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
不想当程序猿_1 小时前
【蓝桥杯每日一题】求和——前缀和
算法·前缀和·蓝桥杯
落魄君子1 小时前
GA-BP分类-遗传算法(Genetic Algorithm)和反向传播算法(Backpropagation)
算法·分类·数据挖掘
菜鸡中的奋斗鸡→挣扎鸡1 小时前
滑动窗口 + 算法复习
数据结构·算法
Lenyiin1 小时前
第146场双周赛:统计符合条件长度为3的子数组数目、统计异或值为给定值的路径数目、判断网格图能否被切割成块、唯一中间众数子序列 Ⅰ
c++·算法·leetcode·周赛·lenyiin
郭wes代码1 小时前
Cmd命令大全(万字详细版)
python·算法·小程序
scan7242 小时前
LILAC采样算法
人工智能·算法·机器学习
菌菌的快乐生活2 小时前
理解支持向量机
算法·机器学习·支持向量机
大山同学2 小时前
第三章线性判别函数(二)
线性代数·算法·机器学习