2021-10-17高二CSP模拟赛23

OIOI 之神啊,请赐予我力量

牛表

标签

最短路

思路

可以想到一个非常暴力的做法,直接连边跑 floydfloyd , 复杂度 O(n3)O(n^3) .

然后有两种优化方法,一个比一个不正经

Tarjan缩点

发现从 xxx2x^2 花费为 00 . 然后从 xxx2x^2 连边建图,然后跑 TarjanTarjan 缩点 。缩完点之后再套个循环展开跑 floydfloyd9595 分。

打表找规律

打表发现答案不会特别大,不会超过 2020 , 所以只需要连接长度小于 2020 的边,然后跑 dijdij 就行了.

Code

牛牛和数组操作

标签

区间 dpdp

思路

考虑 O(n3)O(n^3) 暴力 dpdp , 这是很显然的。

然后考虑卡常。

发现每次改为 00 的点原来的值是区间的最大值。因为这样显然是最优的

Code

与巨

一些结论:

fnf_n2n12^n-1.

G(x)=2popcount(x)1G(x) = 2^{popcount(x)} - 1

[((ic)&G(i))=i]=[((i(c1)&G(i))=0][((i*c)\&G(i))=i] = [((i*(c-1)\&G(i))=0]

cntcnt 表示 cc 末尾 00 的个数.

F(x)F(x) 表示 cc 最后一个 11 的位置,那么只需要保证 F(x)<=cntF(x) <= cnt

根据这个就可以计算出答案了。

Code