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\)加入时,有两种情况。

  1. \(qry(st_{top},i)=cur\),则加入点\(i\)至链上。
  2. \(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})\)
你说这过不去怎么办?抱歉,因为常数小,不卡常就能过。
那更优的分治做法呢?主播要下播了,待会儿再讲。
懒得说了,自己看官解吧。

posted @ 2025-01-24 22:29  wjwweiwei  阅读(23)  评论(0)    收藏  举报