模拟16

模拟16

T1

感觉好像需要容斥但是发现有点难搞,所以就只算了全是问号的情况,正解的确是\(DP\)加容斥。

每一行中黑白块一定是各占一半或者是只有一种的,于是可以将它分为四种情况,黑在(左上,左下,右上,右下),但是好像有点繁琐,可以改成,黑在左侧,且黑白分界线单调不降,或者单调不升,黑在右侧,且黑白分界线单调不升。

先考虑全是问号的情况,显然可以用前缀和优化直接\(N^2\)做,但是如果有限制,转移需要条件,所以加一个辅助数组,用\(vis[i][j]\)表示第\(i\)行,\(1-j\)填黑,剩下的全填白是否合法,\(vis[i][0]\)即表示全填白,\(vis[i][m]\)表示全填黑。

当且仅当\(vis[i][j]==1\)的时候再进行\(dp\)的转移。

最后考虑容斥,重的情况仅有可能是某一列全是黑,这样单调不升和单调不降都算了一次,统计这样的列数然后减掉。

还有就是全是黑的或者全是白的,如果有这种可能那么必然会算四遍,所以有一种就减\(3\)

T2

容易发现中间的段如果有未匹配的左括号,那么一定在序列右侧,如果有未匹配的右括号,那么一定在序列的左侧,所以可以知道左侧的括号段中未匹配的左括号数量的下界,于是就可以枚举了。

T3

一个比较神奇的\(DP\),首先知道分解后二的次数即二进制下末尾连续\(0\)的个数,然后就可以状压了,对于乘\(2\)的操作,相当于左移一位,维护信息比较好维护,但是加法就不是很好维护了,因为会有进位的情况,只有连续的加法进位会导致出问题,并且如果只进了一位是没有影响的,所以可以将后八位状压,这样进位最多只会进一位,注意这里说的进位是连续加法进位,只要有一个左移维护的信息就不会错。

T4

如果是一个奇环,那么一定不可行,因为最后会缩成三元环,这样任意两个点之间都没办法缩了,剩下的如果是偶数环,那么一定可以缩成一条链,对于环上,可以钦定两个点为链的端点,这条链的长度一定不超过这两点间的最短距离,于是就知道对于每个联通块,任意两点间最小距离的最大值就是贡献。

posted @ 2020-10-15 17:08  An_Fly  阅读(87)  评论(0编辑  收藏  举报