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的解法启发才想出来的。