[CF] 1040 Div 2 部分题解
zerc

博客又是好久没更了。。。

挖坑不填。。。

又挖了个新坑。。。


题面

题解


A. Submission is All You Need

给定非负整数可重集 SS,重复任意次操作:选取子集 SS',将 sum(S)\text{sum}(S')mex(S)\text{mex}(S') 添加到分数,删去 SS'。求最大分数。

只有当 S={0}S'=\lbrace 0\rbrace 时,mex(S)\text{mex}(S')sum(S)\text{sum}(S') 更优。

ans=S+Count(0)ans=\sum S+\text{Count(0)}

B. Pathless

给定数组 {a},ai{0,1,2}\lbrace a\rbrace, a_i\in\lbrace 0,1,2\rbrace{a}\lbrace a\rbrace 中包含至少一个 00,一个 11 和一个 22) 和整数 ss,是否可以通过重排 {a}\lbrace a\rbrace 使得不存在一条从 11nn 的路径(每一步均可以向左或向右移动一个单位,但起点终点确定),若可以,输出任意满足条件的 {a}\lbrace a\rbrace,不满足输出 1-1

分类讨论:

  • ai>s\sum a_i > s{a}\lbrace a\rbrace

  • ai=s\sum a_i = s1-1

  • ai<s\sum a_i < s

    • sai=1s - \sum a_i = 1{0,,0,2,,2,1,,1}\lbrace 0,\dots,0,2,\dots,2,1,\dots,1\rbrace

    • sai>1s - \sum a_i > 11-1

      • 至少有一个 0011 相邻:显然可以;

      • 00 只与 22 相邻:则至少有一个 1122 相邻,可以在 ai\sum a_i 的基础上加上任意个 2233 构成 ss

C. Double Perspective

题面太长了不写了。。

g(S)g(S) 一定为 00

Sol 1

用并查集维护,每次选不会构成环的加进答案。

Sol 2

被其他线段完全包起来的线段不选。

D. Stay or Mirror

给定一个排列 pp,创建一个数组 a,ai{pi,2npi}a,a_i\in\lbrace p_i, 2n-p_i\rbrace,求最小的相邻元素交换次数使 aa 由大到小有序。复杂度要求:O(n2)O(n^2)

对于 pi=1p_i=1

  • Stay:贡献为 nin-i

  • Mirror:贡献为 i1i-1

删去 11,重复此过程可得对于第 ii 个元素:

  • Stayi=j=i+1n1 if pj>piStay_i=\sum_{j=i+1}^n 1\ \text{if } p_j>p_i

  • Mirrori=j=1i11 if pj>piMirror_i=\sum_{j=1}^{i-1} 1\ \text{if } p_j>p_i

ans=i=1nmin(Stayi,Mirrori)ans=\sum_{i=1}^n\min(Stay_i, Mirror_i)

E1. Interactive RBS (Easy Version)

f(t)f(t)tt 中非空正则括号字串个数,通过 f(t)f(t) 找到长为 nn 括号序列 ssn1000,Q550n\leq 1000,Q\leq 550

首先寻找 i,ji,j 使得 si=s_i= (sj=s_j= )

  • f(s)0f(s)\not=0

    二分查找使得 f(s1s2si)0f(s_1s_2\dots s_i)\not=0 的最小的右端点,则有 si1=s_{i-1}= (si=s_i= )

  • f(s)=0f(s)=0

    由题意 sn=s_n= (s1=s_1= )

构造 t=si)(sj()t={s}_i\texttt{)(}{s}_j\texttt{()},可根据 f(t)f(t) 的结果知道 sis_isjs_j 的值。

Powered by Hexo & Theme Keep
Total words 7.1k Unique Visitor Page View