Codeforces Round #556 题解
Codeforces Round #556 题解
Div.2 A Stock Arbitraging
傻逼题
Div.2 B Tiling Challenge
傻逼题
Div.1 A Prefix Sum Primes
傻逼题,先放2,1然后放完2然后放完1
Div.1 B Three Religions
有三个字符串s1,s2,s3s1,s2,s3和一个主串ss,每次操作改变一个sisi(插入或删除字符),每次操作完之后问ss是否可以分成33个子序列正好是s1,s2,s3s1,s2,s3。任意时候|si|≤250|si|≤250。
设nxt[x][i]nxt[x][i]表示主串上字符ii在>x>x上第一个出现的位置。
设f[x][y][z]f[x][y][z]表示三个串分别匹配到x,y,zx,y,z需要主串的最短长度。
那么这个可以O(1)O(1)转移,只要枚举拼起来的最后一个字符就行了。
插入最多改变25122512个ff值,每次插入dp一遍多出来的ff就行了。
https://codeforces.com/contest/1149/submission/53513066
Div.1 C Tree Generator™
有一个合法的括号序列,每次交换两个括号(保证还是合法)求这个括号序列对应的树的直径
Orz zsy碾标算
直径相当于选一段,匹配完括号以后剩下最多的括号数
然后(因为zsy太强了)等于这一段分成两段后面的权值和-前面的权值和最大值,其中左括号权值为1,右括号为-1,证明显然
所以在线段树上维护一堆东西。。。就行了
要维护的:最大/最小前/后缀和,最大前/后缀的dd值,序列整体dd值,权值和,答案
一段的dd值就是将这一段分成两段后-前权值最大值
https://codeforces.com/problemset/submission/1149/53591504
Div.1 D Abandoning Roads
我是sb。。考场上读错题了。。。
有一张图只包含边权为a,b(a<b)a,b(a<b)的边。对于每个点pp求一个最小生成树满足11到pp距离最小。
显然最小生成树会先取完aa,那么先预处理出aa边组成的联通块。11到pp的最短路边权为bb的边一定连接两个不同的联通块,而且都会走到一个之前没走过的联通块。那么可以状压所有联通块,最短路的同时记一下走过哪些联通块了,走bb边时判一下新的联通块有没有走过。点数是O(2nn)O(2nn)级别的。
可以发现如果一个联通块点数≤3≤3,那么在这个联通块先走bb边出去再走bb边回来是没有意义的,因为这样至少走2b2b,而这个联通块内部最长也就最多2a2a。所以不需要记这些联通块,点数降到O(2n/4n)O(2n/4n)就可以直接做了。
https://codeforces.com/contest/1149/submission/53592086
Div.1 E Election Promises
有一张有向无环图,每个点有权值。双方轮流操作,每次操作降低一个点的权值然后任意修改这个点所有后继的权值。不能操作者输。判断先手胜负,如果先手胜输出第一步走的一个可行方案。
先摆结论:SG(x)=mexx→iSG(i),sum(x)=⊕SG(i)=xhi。如果有一个sum(x)≠0,先手必胜;否则必败。
如果所有sum为0,先手操作了点i,那么操作后一定有sum(SG(i))>0。后手就再次操作使得sum(i)=0。操作方法就是找到最大的i满足sum(i)>0,然后可以将所有sum修改为0。
本博客中博文均为原创,未经博主允许请勿随意转载,谢谢。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步