不多扯,直入正题。
A. k-String http://www.codeforces.com/problemset/problem/219/A
水题。先统计字母个数,然后判断是否能将这些字母分成k份,能的话分成k份就好了。
B. Special Offer! Super Price 999 Bourles! http://www.codeforces.com/problemset/problem/219/B
构造题。我一开始是从小往打构造,马上发现错了。然后就从大往小构造,方法是每次都把最后一位变成9,如果最后一位是9那么不调整,如果不是9那么前一位要减一,直到小于最小的数。
C. Color Stripe http://www.codeforces.com/problemset/problem/219/C
贪心或者DP,我是用贪心。先特判k==2的情况,这时候就两种情况要么奇数位为A偶数位为B,要么奇数位为B偶数位为A,答案是两种中转变次数较小的。k != 2的时候,就从前往后遍历,找一整块相同的字母,然后把第2,4...变成和后面一个不一样的字母即可,因为颜色大等于3,那么肯定可以找到一种和当前颜色不一样又和后面一个颜色不一样,而这样显然是最优方案。这题有人用O(n*m*m)的DP去写,我觉得很神奇,这样最多的运算量是3亿多。
D. Choosing Capital for Treeland http://www.codeforces.com/problemset/problem/219/D
树形DP。这题有个很巧妙的转换,那就是把边的方向转变成边权,如果正向那么边权威0,如果反向,那么边权为1.经过这样转换,问题就变成求以某点为根到其他各点的边权总和,然后求边权总和最小的那些点。这类树形DP很经典,做法是先以某点为根向叶子节点遍历,然后再以前面那点为根向下更新答案。
E. Parking Lot http://www.codeforces.com/problemset/problem/219/E
目测是用堆或线段树维护最远的距离,但是不会写,数据结构太弱了。这里有题解:Here.
本文ZeroClock原创,但可以转载,因为我们是兄弟。