目录

Codeforces Round 659 Div.2

链接:https://codeforces.com/contest/1383

A Common Prefixes

题意

已知有一个长度为$n$的序列$a$, $a_i$是 $s_i, s_{i+1}$的最长公共前缀的长度。 需要输出合法的$n+1$个串。

题解

构造题:题中给出的数据范围是$0\leq a_i \leq 50, n \leq 100$ 那么我们构造的字符串的长度上限为50。 构造方法如下:第一个字符可以随意取,之后的每一个字符都由前一个字符推出, 假如当前长度比$a_i$小,那么当前的字符就用上一个字符,否则用上一个字符之后的字符。

B1 Koa and the Beach (Easy Version)

题意

给出$n$片海的初始深度,在$2k$秒时间之内,前$k$秒 深度每秒都加一,后$k$秒,深度每秒都减一 现在需要从海的一边游到另一边,每秒可以选择移动到下一片的海域或者是停在当前的海域。 如果停留在的海域深度大于了$l$,就会被淹死。 问能否游过海。

题解

这个题可以用dp,用dp[i][j]表示第j秒在第i片海,用到的状态转移方程是dp[i][j] = max(dp[i][j-1],dp[i-1][j-1])

B2 Koa and the Beach (Hard Version)

题意

题意大多和上面一样,但多了一些约束条件

题解

设当前位置的水深为$d_i$,则需要满足$d_i \leq l$,Koa才能不溺水。 如果可以从一个安全位置 $i$ 到达下一个安全位置 $j$,那么在从 $i$ 到 $j$ 的过程中,潮汐高度至多下降一次。 因为如果潮汐从 Koa 到达一个不安全的位置 $m,(i+1 < m < j)$ 时开始再次开始下降,那么潮汐在上一秒高度为 $k$。如果 Koa 在上一秒所处的位置 $b$ 时没有溺水,那么有位置$b$处水深 $p_b+k≤l$,$b$ 则是一个安全的位置,矛盾。所以上述命题成立。 所以可以知道在Koa最好在潮汐尽可能地高且在下降时从 $i$ 出发。 按照这样的策略走,就能判断Koa能否过海。

C String Transformation 1

题意

有两个字符串$a,b$,现做如下操作,把$a$中所有相同的字符换成比该字符大的任意字符。问:最少多少次操作能够把$a$变为$b$

题解

用并查集求连通块的大小,若$a$中字符大于 $b$ 则直接输出-1。

D GameGame

题意

Koa和KoalaKoala两人玩游戏,初始分均为$0$,每次两人从一个数组中选择一个数,选择后该数字会被从数组中删除,两人的分数异或上该数字的值为新的分数,问均采取最优策略谁能赢,规定KoaKoa先手。

题解

这个题是博弈论的题: 分析一下: 设$p_i$表示$n$个数二进制位第$i$位为$1$的个数 若$2|p_i$那么先手和后手对$i$位的结果没有影响 从而我们需要找到$j$,使得$2|p_j=1$这样才能导致先后手的结果在第$j$位不同 现在我们的任务就是找打最大的$j$位,使结果最大化

1. 若$\frac{P_j-1}{2}$是偶数,那么先手的就一定赢 先手在该位先取一个1,然后跟着后手选,那么后手会选择偶数个1,结果为:先手在该位值为1,后手为0。

2. 若$\frac{P_j-1}{2}$是奇数,分两种情况

(1). 若$2|n = 1$先手就必输: 先手在该位先取一个1,然后跟着后手选,那么后手会择偶数个1,结果为:先手在该位值为1,后手为0。

(2). 若$2|n$那么先手必赢 先手第一步选一个0,然后将状态转为$2|n=1$的局面,且轮到后手先选择,上面已经证明,这种局面先选择的必输。

E String Transformation 2

题意

待补中:

题解

F Rearrange

题意

待补中:

题解