Codeforces1348 题解
A Phoenix and Balance
显而易见,将前\(\frac{n}{2}-1\)个和最后1个分为1组,剩下的1组即为最优方案。
B Phoenix and Science
这题直接构造。
设\(a\)中不重复的值的个数为\(cnt\)。
如果\(cnt>k\)无解。
如果\(cnt < k\)那么将其补到k;如果\(cnt=k\)则不操作;然后按小到大输出所有不重复的值,重复\(n\)次。
C Phoenix and Distribution
分类讨论一下完事了。
将输入的串\(s_{0,1,..n-1}\)排序。
特判\(k=1\)。
- 如果全是相同的字符,就平均分配。
- 如果最小的字符的个数大于\(k\)个
- 如果\(s_k == s_{n-1}\),那么将前\(k\)个字符分为\(k\)组,剩下的平均分配。
- 否则,将前\(k\)个字符按顺序分为\(k\)组,剩下的字符全给第\(1\)组,字典序最大的必定是第\(1\)组。
- 否则,将前\(k\)个字符按顺序分为\(k\)组,剩下的字符全给第\(1\)组,字典序最大的必定是第\(k\)组。
D Phoenix and Science
这题逆向思维做。
题目几乎是在明示只考虑每天的增量。
经过简单的推导,可以得到两个性质
- 在第\(i\)天可以到达的范围是\([i, 2^i-1]\)。
- 每天的增量不减。
所以天数就是满足\(2^d-1 \ge n\)的\(d\)的最小值。
从最后一天开始跑,只要跑到前一天可达的范围且满足增量不减就行了。
总结
前4题都是比较简单的,但是最近刷题太少了状态下滑严重。还是需要尽可能地保持竞技状态吧。。。
D题非常有意思,我还是受之前GCJ round1B A题dls的解法启发才想出来的。