\(\color{red}{A}\)

若删除长度为 x 的子串后序列中没有相同元素,那么一定有至少一个长度为 x+1
的子串,删除它后序列中也没有相同元素,然后可以离散+二分

木得代码

\(\color{blue}{B}\)

打几个表忽然发现: 哎?怎么还有个循环节啊23333

代码 : 木得

\(\color{yellow}{C}\)

先把所有物品按照拿走的时间从小到大排序,拿走的时间相同就按照放上去的时
间从大到小。那么一件物品上方的物品就一定会在它的前面。
考虑 dp,设 f[i][j]表示 i 以及 i 上面物品在所有时刻中最大重量为 j 时的最
大收益。
转移的时候,我们需要枚举所有 i 上面的物品,维护一个 g[i]表示时刻 i 之前
物品的最大收益是多少。然后直接转移就好了。

代码 : 木得

\(\color{orange}{D}\)

这道题简化一下题意的话就是

给你n个长度为m的二进制串,让你选k个出来,使得这k个二进制异或起来全为1

这个时候,我们想,如果这个串串一共只有\(2^n\)个子集,然后我们只要用这个\(2^n\)减去不符合条件的就好了!然后我们就可以容斥一下

\(ans = \sum2^cnt{cnt是k的子集个数,k\inS}\)

然后难点就变成了求cnt

这时候我们想到了fmt , 用来求高维矩阵和

1522713-20190908201355202-1691890967.png

如图 : x轴上方有几个*就代表有几个子集

还是木得代码