Codeforces Round 999, Div. 1 + Div. 2记录
A
对于数组中奇偶个数讨论。
B
这也能FST?
显然要找到四个数\(a,b,c,d\),满足\(a=b,c<d,2a+c>d\)
那么\(d-c<2a\)
将数组排序后,枚举\(a\),将数组中相隔\(\le 2\)的数对存下来排序,暴力找,显然只会找\(O(1)\)个数对。
C
懒得说了,把基本dp式子列出来后发现有用状态数只有\(O(n)\)个,转移还是\(O(1)\),这不没了吗。
D
正着来比较难维护,考虑倒着,发现当\(|x-y|<=1,x+y=z\)时,\(z\)对应的\(x,y\)是唯一的。
那么就直接拿一个堆贪心匹配就好了。
E
主播又因打错eps个字符调了半个小时,甚至还开拍了。
预处理出\(dp_{i,j}\)为\(a_i\)被操作\(j\)次减小的最大值。
显然\(dp_i\)关于\(j\)是凸的,那么仍然拿堆维护就好了。
F1
第二天早上改了2个字符,过了。纪念WA三发on pretest 4
这个最小操作次数显然是假的。对于连续的四个连续段,记它们的长度为\(a,b,c,d\),则操作\(b,c\)后会变成\(a+c,b+d\),连续段数量一定减少2
这个结论对于首尾是假的,不过显然首尾被操作当且仅当\(S_1\neq T_1\)或\(S_n\neq T_n\),特判一下就好了。
观察到操作后带来的影响是奇偶位置上的数的合并,那么从左到右匹配就行了。
G
令\(u,v\)是朋友时相连的边为\(1\)边,否则为\(0\)边。
可以手模出\(k=\lfloor \frac{n+1}{3}\rfloor\),至于为什么可以考虑构造一个\(2k+1\)的\(1\)团,再加\(k\)个点,剩下的边都为\(0\)边。这种情况下卡的最满。
问题在于如何构造。维护一条边权相同的链,令边权为\(cur\)。
当有新点\(i\)加入时,有两种情况。
- \(qry(st_{top},i)=cur\),则加入点\(i\)至链上。
- \(qry(st_{top},i)\neq cur\),则删掉\(st_{top},st_{top-1}\),三点形成一个\(01\)链。
钦定最终维护链的\(cur\)为\(0\),
令此链上剩余\(t\)个点,则情况二共发生\(\frac{n-t}{3}\)次,其中\(n\equiv t\)。
显然可以构造\(cur\)的组数为\(\frac{n-t}{3}+\lfloor \frac{t}{2}\rfloor\)
分\(n\)模\(3\)的情况讨论发现顶到了上界。
I
这个跨层转移很高妙啊,不愧是3500。
我们列出基本的式子,令\(dp_{i,j}\)为前\(i\)轮比赛,胜了\(j\)次的最小代价,转移显然。
你发现这玩意除了单调不降(取后缀min)以外没有任何特殊性质,那就要从本题的性质来考虑。
官解的hint1提示了可以从\(dp(l,*)\)转移到\(dp(r,*)\)。
实际上,当状态第二维\(|j-(l-j)|>r-l\)时,\(l\)到\(r\)的类型二的比赛一定要么全赢,要么全输。
令\(l\)到\(r\)的类型二的比赛共有\(t\)个,则当\(j-(l-j)>(r-l)\)时,\(dp_{l,j}\rightarrow dp_{r,j+i+t}+g(i)\),其中\(g(i)\)为这一段类型一选\(i\)场获胜的最小代价。
那么\(g(i)\)最优肯定要贪心选最小的\(i\)个,并且你发现这个函数是凸的,那么就可以决单分治了。
\((j)-(l-j)<l-r\)时同理。
剩下的就是\(|j-(l-j)|<=r-l\)了,可以暴力\(O((r-l)^2)\)转移
令\(r-l=B\),即将原序列按\(B\)分块,复杂度大概是\(O(\frac{n}{B}(B^2+n\log n ))\),取\(B=\sqrt{n\log n}\)得到最优复杂度\(O(n\sqrt{n\log n})\)
你说这过不去怎么办?抱歉,因为常数小,不卡常就能过。
那更优的分治做法呢?主播要下播了,待会儿再讲。
懒得说了,自己看官解吧。

浙公网安备 33010602011771号