agc020 题解

link

code

A \(\color{gray}\bigstar\)

观察题,答案只和 \(A-B\) 的奇偶性有关。

B \(\color{gray}\bigstar\)

倒推即可,讨论一下比较简单。

C \(\color{green}\bigstar\)

考虑一个集合 \(S\) 和它的补集的和等于整个序列的和,也就是说所有子集和都在总和的一半的左右均匀排布,因此只需要求出 \(\ge \frac{\sum a_i}{2}\) 的最小的和即可。

这个可以直接背包,用 bitset 优化一下就可以做到 \(O(\frac{n^2a_i}{w})\)

D \(\color{blue}\bigstar\)

首先连续段最小长度这个可以求,令 \(k=\frac{A+B}{\min(A,B)+1}\)

那么要让字典序最小,显然是前面贪心地放 \(k\)\(A\),一个 \(B\),这样循环,直到后面不合法,那只能停,然后后面一定是 \(k\)\(B\),一个 \(A\) 这样放。

这个中间位置可以直接二分求。

注意网上很多都存在一个问题,如果二分中心在 \((k+1)\) 的倍数位置上,后面的 \(B\) 的个数需要去减一,因为这个位置放 \(B\),然后再在后面放,这个好像会出问题,但是我不太会 hack。

出成数数放模拟赛

E \(\color{blue}\bigstar\)

神秘题。

一个简单的暴力是直接记忆化搜索,搞出当前的状态。

然后枚举最后一个字符并在的块的大小,然后暴力搜索。

复杂度不知道,但是发现每次分成两个部分后长度减半,感觉比较优秀,写个代码递推一下会发现大概是 \(2\times 10^7\) 左右,那就能过。

官方题解分析是 \(O(n^3)\),比较问号。

F \(\color{green}\bigstar\)

啊这,感觉和招新一样啊。

套路地枚举每个数小数部分的大小关系,然后里面的东西就只需要考虑整数部分,状压 dp 一下,从左向右一个一个位置扫过去,看以这个点为左端点的区间是否加入,需要满足相邻两个区间有交即可。

有一些细节,要钦定一个区间放在最前面,断环成链,然后这个区间的小数部分要最小,以及这个区间长度要最长,这样最右边的区间不可能环回来后合法。

直接做复杂度 \(O(n!2^n(nC)^2)\),小卡常。

用招新的套路,只需要记录右端点最大的区间的区间的小数排名即可,这样复杂度去掉了 \(n!\),乘上个 \(n\)

posted @ 2023-03-03 20:04  houzhiyuan  阅读(19)  评论(0编辑  收藏  举报