Codeforces Round #556 题解

Codeforces Round #556 题解


Div.2 A Stock Arbitraging

傻逼题spa

Div.2 B Tiling Challenge

傻逼题code

Div.1 A Prefix Sum Primes

傻逼题,先放2,1而后放完2而后放完1字符串

Div.1 B Three Religions

有三个字符串$s_1,s_2,s_3$和一个主串$s$,每次操做改变一个$s_i$(插入或删除字符),每次操做完以后问$s$是否能够分红$3$个子序列正好是$s_1,s_2,s_3$。任意时候$|s_i|\leq 250$。get

设$nxt[x][i]$表示主串上字符$i$在$>x$上第一个出现的位置。it

设$f[x][y][z]$表示三个串分别匹配到$x,y,z$须要主串的最短长度。io

那么这个能够$O(1)$转移,只要枚举拼起来的最后一个字符就好了。test

插入最多改变$251^2$个$f$值,每次插入dp一遍多出来的$f$就好了。方法

https://codeforces.com/contest/1149/submission/53513066im

Div.1 C Tree Generator™

有一个合法的括号序列,每次交换两个括号(保证仍是合法)求这个括号序列对应的树的直径co

Orz zsy碾标算

直径至关于选一段,匹配完括号之后剩下最多的括号数

而后(由于zsy太强了)等于这一段分红两段后面的权值和-前面的权值和最大值,其中左括号权值为1,右括号为-1,证实显然

因此在线段树上维护一堆东西。。。就好了

要维护的:最大/最小前/后缀和,最大前/后缀的$d$值,序列总体$d$值,权值和,答案

一段的$d$值就是将这一段分红两段后-前权值最大值

https://codeforces.com/problemset/submission/1149/53591504

Div.1 D Abandoning Roads

我是sb。。考场上读错题了。。。

有一张图只包含边权为$a,b(a<b)$的边。对于每一个点$p$求一个最小生成树知足$1$到$p$距离最小。

显然最小生成树会先取完$a$,那么先预处理出$a$边组成的联通块。$1$到$p$的最短路边权为$b$的边必定链接两个不一样的联通块,并且都会走到一个以前没走过的联通块。那么能够状压全部联通块,最短路的同时记一下走过哪些联通块了,走$b$边时判一下新的联通块有没有走过。点数是$O(2^nn)$级别的。

能够发现若是一个联通块点数$\leq 3$,那么在这个联通块先走$b$边出去再走$b$边回来是没有意义的,由于这样至少走$2b$,而这个联通块内部最长也就最多$2a$。因此不须要记这些联通块,点数降到$O(2^{n/4}n)$就能够直接作了。

https://codeforces.com/contest/1149/submission/53592086

Div.1 E Election Promises

有一张有向无环图,每一个点有权值。双方轮流操做,每次操做下降一个点的权值而后任意修改这个点全部后继的权值。不能操做者输。判断先手胜负,若是先手胜输出第一步走的一个可行方案。

先摆结论:$SG(x)=\mathbb{mex}{x\rightarrow i}SG(i)$,$sum(x)=\oplus{SG(i)=x}h_i$。若是有一个$sum(x)\neq 0$,先手必胜;不然必败。

若是全部$sum$为$0$,先手操做了点$i$,那么操做后必定有$sum(SG(i))>0$。后手就再次操做使得$sum(i)=0$。操做方法就是找到最大的$i$知足$sum(i)>0$,而后能够将全部$sum$修改成$0$。

https://codeforces.com/contest/1149/submission/53593317

相关文章
相关标签/搜索