转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?
viewmode=contents
by---cxlove
Qualification Round
略
Round 1
D:想像一下DFS序,可是输出是反向的
E:直接按@把串分成一段段的,然后以@为中心往两边找。
Round 2
C:贪心。肯定先把常规题目先做完,由于常规题目的分数是不变的。然后依据动态分数的是,从高到低做。
能够这么思考,假设从小到大。每一个动态分数都能达到。那就是不断翻倍。假设某个动态分数达不到,不能翻倍,仅仅能取那么多分的话。我们当然是希望这种题目先做,保证基数增大,后面的翻倍才会更有效。
D:状态压缩DP,有效的序列肯定是一个递减序列,而这种序列仅仅存在于末端,并且长度肯定 < k。就能够状压了。
比方说 8。2,4。2,无论之后是如何的序列,第一个2不可能被合并了。而前面的8肯定也没实用了,所以有效部分仅仅是4,2。
那么dp[i][j]表示前i项,末端的递减状态序列状态为j。
E:线段树,对于区间[l , r]记录一个2 * 2的矩阵,保存从一端到还有一端的4种情况的最短路径。合并的话应该非常好做。直接枚举。查询的时候,不断递归,有些子区间会反复计算。所以记忆化一下。
Finals
A:有11个字符是对称的,搞出来后就没了。
。。
B:首先有一些人本来就在的。先要处理一下。
之后大概就是,进去的时候。本来已经有人了,那么肯定不是leaders,走的时候。里面还有人,那么也肯定不是leaders。
然后要考虑一些特殊情况。进去的时候,里面仅仅有本身一个人,那么说明其他人(除了压根没有出现的人)都不是leaders。走的时候里面没有人了,那么也说明其他人(除了压根没有出现的人)都不是leaders。
C:统计每一个人被赞同多少次,排序之后就是不断维护一个前缀和。
最后再枚举被同一个人赞同的两个人。
D:暴力平衡树来模拟整个移动过程是能够的。
线段树也是能够做的。将1-m这些位置 空出来,定义原先的位置为[m + 1 , n + m],那么就避免了移动过程。
我们仅仅须要维护区间有多少个位置不是空的就能够找到对应的第y个位置。移动的话,就是在当前位置-1,然后在1-m里对应向前插入就OK了。
然后记录已知的杯子的位置 ,以及某个位置 已经确定是哪个杯子。能够推断是否冲突。
假设用BIT来维护的话,是须要二分得到第y个位置的。
E:给的坐标不是很大。所以击打的次数有限的。
枚举每一次击打。假设这次击打要落在某个圆内的话,我们能够得到这条射线的夹角范围。那么将这些时间点排序之后就成了区间覆盖次数最多的了。
要么就讨论的具体点。由于是一个环。可能有些区间要分成两段,然后作区间覆盖。
总之就是细节要注意一下。
code : https://github.com/cxlove/ACM_ICPC/tree/master/Contest/Codeforces/Coder-Strike_2014