已经2017中旬了,我才开始改2016的noip题。。
toy:
太水了,模拟即可。
处理好圈的问题。
running:
这是这一年最难的题。
我还是来讲讲具体做法吧!
首先我们考虑每个跑步的人如果会给观察者有贡献,则观察者一定是在跑步的人的s到lca,或lca到t上。这两者都是一条链。
dep[]表示深度,w[]为观察这出现的时间,i为观察者的点,T为已经走了的时间,len为路径的长度
则当路径为s到lca时,则会满足
dep[s]=dep[i]+w[i]
此时可以对于每一个点,找出满足条件的观察者。
当路径为lca到t时,满足
dep[t]-dep[i]=len-T
统计则可以用一个桶,lca用tarjan离线搞。
classroom:
这是一道概率dp。
dp[i][j][2]:
dp[i][j][0]表示第i天,申请了j次,这一天没有申请
dp[i][j][1]表示第i天,申请了j次,这一天申请了
然后用期望的公式算即可。
dp公式还是比较简单,明确期望的概念,基本可推。
组合数问题:
ans[i][j]表示[0,i]和[0,j]中满足条件的组合数。
题目可以转为满足条件的C[i][j]有多少个是0
但是需要前缀和。
注意的是:矩形前缀和有一点,统计C[i][i]时,需要注意ans[i-1][i]是没有计算过的,需要重新计算。
蚯蚓:
这是三个队列就可以解决,只是我想不到。
q1,q2,q3为三个队列
q1为原序列
q1是排好序的。
在切除后的两条x和y中,较大的放在q2,较小的放在q3。
则可以证明,q2,q3是单调递减的。
则这题就可做了。
angrybirds:
状态压缩dp
预处理每个二次函数最多可以打掉的bird,用二进制表示。
然后记忆化搜索即可。