都是codeforces上的原题。
A.Watermelon
本题唯一要注意的就是2不可分割。
B.Before an Exam
记录最少时间和最大时间,如果用时在最少和最大区间中,输出YES,然后贪心的把每天的时间输出。
也有人用dp,不过没必要了。
C.registration system
用stl中的map做很简单,也有用字典树的,同样没有必要。
D.Mysterious Present
这个题几乎是唯一一个用的着算法的题,dp求最长上升序列,然后输出方案,方案的记录可以用一个数组pre[i]记录第i个前最长可满足的信封编号j。
这个题WA在了pre数组更新的地方,本题是一个很简单的dp,不过我竟然写的那么不顺利。
E.Triangle
枚举四条边,看是组成三角形,还是三边之长等于第三边,还是组不成三角形。
F.President's Office
记录经理的办公桌位置,然后记录与办公桌相邻的职员,用一个2维数组记录即可。
G.Alice,Bob and Chocolate
我用了四个参数ls表示alice吃的长度,rs表示bob的长度,l表示Alice吃到了第几块巧克力,r表示bob吃到了第n-r块巧克力。当ls<=rs时l++,反之r++,当l+r==sum跳出循环。
H.Lizards and Basements2
没做出来,题目描述,一颗炮弹课以对一个人伤害为a,同时造成相邻的人b伤害。求最少用多少炮弹可以把n个人都消灭。
题解上说 动态规划,状态转移方程为f[t][i][j][k]表示第t-2,t-1,t个人的血分别为i,j,k时最少的攻击次数。
I.Expostion
给出n个数,找出最长的子序列,不需要连续,使得子序列最大差值不超过k,输出所有满足的始末位置。
RMQ或者线段树+二分。
枚举起点位置,然后二分右边的起点,求区间最大最小值,用RMQ的st算法是nlog(n)的预处理,O(1)查询,线段树我会,每次都是logn
最近在学LCA,学完tarjan,就去学st算法,因为RMQ和LCA可以相互转化。