A - Maximum Multiple
推一下式子暴力判断即可,范围不会太大。
B - Balanced Sequence
题意:
给出\(n\)个串,现在定义“好串”:
- 空串;
- 若\(A,B\)为“好串”,那么\(AB\)会“好串”;
- 若\(A\)为“好串”,那么\((A)\)为“好串”。
现在可以对\(n\)个串的顺序任意排列之后拼接起来,问最长“好串”子序列的长度。
思路:
- 对于每个串,先处理出合法括号序列记入答案,那么最后每个串都形如\("))))((("\)的形式,我们将其记为\((L,R)\),表示左括号和右括号分别有多少个。
- 接下来考虑怎么安排顺序使得答案最优。
- 考虑两个的情况,那么答案为\(min(L_1,R_2)\)及\(min(R_1,L_2)\),这时我们按照\(min(L_1,R_2)<min(R_1,L_2)\)的顺序放置即可。
- 为什么?
- 注意一下当\(min(L_1,R_2)=min(R_1,L_2)\)时,我们要按照\(L\)从大到小排序,这可以让更多的\(L\)对后面产生贡献。
详见代码:
C - Triangle Partition
排序每次选左边的就行。
D - Distinct Values
题意:
构造字典序最小的序列,满足在给出的区间中数字各不重复。
思路:
- 对于每个位置,能影响它的区间显然从左端点最远起。
- 发现随着位置的不断增加,最远位置具有单调性。
- 那么利用\(set\)随便搞搞就行了,\(set\)里面的就插入可以用的数,每次取最小的就行。
比赛的时候写了个权值线段树求区间\(mex\)的做法,维护所有权值最后出现的最小值就行,然后贪心选权值。还是搞复杂了= =思维还是不够灵活。
G - Chiaki Sequence Revisited
题意:
定义:
\[a_n=\left\{\begin{aligned}&1&n=1,2\\&a_{n-a_{n-1}}+a_{n-1-{a_{n-2}}}&n > 2\end{aligned}\right.\]
先求\(\sum_{i=1}^n{a_i}\),\(n\leq 10^{18}\)。
思路:
懒得写啦,有博客写得很好:传送门。
找规律的时候想到二进制基本规律就出来了,核心就是找到出现次数的规律就行。
代码有些细节,因为根据规律,\(1\)只会出现一次,但实际上会出现两次,所以我们将\(n\)偏移一下即可。另外注意我们找\(x\)的时候,要找\(f(x)\leq a_n\)的最大\(x\),这里有个等于是为了方便处理数据较小时的情况。
详见代码:
K - Time Zone
模拟。