Codeforces Round #794 (Div. 1) 题解

Codeforces Round #794 (Div. 1) 题解

A. Circular Local MiniMax

先排序。

如果n是奇数显然无解。

若n是偶数,很容易猜到将前\(n/2\)个数相间填,将后\(n/2\)个数也相间填。

然后符合要求当且仅当不存在一个\(1<i\leq n/2\),满足第i个和第\(i+n/2-1\)个相同。

如果存在这个i,可以证明一定无解。

B. Linguistics

首先检查一下A,B的个数是否相同。

剩下的问题就是能否分出c个\(AB\),d个\(BA\)

显然划分的单词不可能跨越\(AA\)\(BB\),所以将相同两个数切开,形成若干相邻不同的串。

\(A..A,A..B,B..A,B..B\)

分类讨论后贪心划分即可。

C. Bring Balance

按套路将\('('\)看作1,\(')'\)看作-1,画出前缀折线图。

如果折现的所有位置都在x轴上方,则就是合法括号串。

翻转一段括号,在折线图上的表现就是将一段折线旋转180度。

容易发现选一个顶峰,然后旋转左边一半和右边一半一定可行。

所以答案\(\leq 2\)

剩下的就是判断能否一次操作完成。

一次操作可以直接看成折线上下翻转。

很容易实现。

D1D2. Permutation Weight

对于所有\(p_i,i\),从\(p_i\)\(i\)连一条边。

则问题就是添加一些边\(i\to i-1/i-1\to i\),满足最终存在欧拉回路。

对于\(D1\)就可以直接贪心加边了,合并两个连通块只需要2的贡献。

对于\(D2\)可以一位一位确定,每次check一段q的前缀是否合法。

确定一段前缀后,剩下的就是一些链和环。

贪心地加边一定是将链头和链尾匹配。然后对于环间的边一定是双向的,跑一边最小生成树即可。

E. The Ultimate LIS Problem

主要就是需要观察到如果将<n+1的看成右括号,>n+1的看成左括号。一定存在一个循环移位满足括号匹配。剩下的非法lis就必须包含n+1了,需要分类讨论+ds。

posted @ 2022-05-28 18:35  WWW~~~  阅读(185)  评论(1编辑  收藏  举报