T1
按照题意模拟即可,注意 while 循环条件不要写错。
Code:
T2
既然他们都想让对方拿的数更大,那么我们不妨让他们依次拿大数给对方,排个序即可。
Code:
T3
简单来说,让你把一个数列分成连续的不超过 kkk 段,求每一段重量和中的最大值,最小化之后,是多小。
最大值最小化,明显的二分,check 也不难写。
Code:
T4
首先给出了限制 sl=0,sr=1s_l=0,s_r=1sl =0,sr =1,那么我们直接记录每一个位置上的,右边第一个 0/10/10/1。
接下来制定贪心策略(注意:任意次操作,本入赛时没看到)。首先容易想到,最高位越大,二进制越大。所以,我们选择最左边的 000 作为 lll 即可。
接下来,rrr 要取 lll 右方第一个 111,为什么呢?这样想,如果取到了第一个 111,那么它会变成 000,这样,下一次的 lll 就可以取到 rrr 变成的 000,显然比其他位置更加优秀。
修改直接按题意即可。
Code:
T5
一眼 bfs,但是有点不一样。
考虑使用 222 个二进制位表示是否已经拿到钥匙和是否已经拯救小枫,扩展的时候写几个判断即可。
Code:
T6
dfs 是很显然的,考虑优化。
显然的,优化 dfs,第一种是记忆化,第二种是 dp,记忆化没写过,直接考虑 dp。
令 dpidp_idpi 表示取模后为 iii 的方案数量,容易得到 dpi=dpi−ajdp_i=dp_{i-a_j}dpi =dpi−aj 。
注意负数,随时取模。(赛时没取模喜提罚时)
Code: