agc020 题解
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\)。