如此水的数据,由于太弱没有AK,真是太菜了。
DAY1:
T1:这道题我只记得mogician和mengbier了,其余都忘光辣~~~。
T2:考场上写了lca后的O(NlogN)的做法,但还是A了。
首先将一个人的跑步拆成两条链,考虑向上走的那一条链(另一条链同理),深度+时间的值是一定的。那么,考虑令这个人出发点x的深度为t,那么x~lca上的深度+观察时间的询问的答案都+1。差分后可以变成每个“点”有(一个树上点上可能有若干“点”挂在上面)一个特征和权值,然后每个点查询子树中特征和它一样的权值和。子树权值和可以用dfs序变为区间和。
考场上我是把“点”和询问按照特征离线,然后用树状数组维护。那么实际上在询问中将点离散化之后就可以用前缀和维护了。这样就是O(N)的。
另外O(N)的做法有两种,介绍一种简单的。
在dfs中维护一个数组,表示每个特征的权值和。那么在dfs到一个点时,记下它询问的特征的那个权值;dfs完子树之后,将这个特征的权值-之前记录的值就是答案了。思想十分简单,实现也很容易。
T3:险些被卡常数。。这应该比之前纪念的D1T3思想难度好多了吧。至少引入了期望>.<。
令dp[i][j][0/1]表示前i个,选j个,第i个选(1)还是不选(0)。然后直接dp即可。
DAY2:
T1:预处理答案。用递推式计算组合数并对k取模,值为0相当于被k整除。然后用二维前缀和来统计答案即可。
T2:sb本质体现无遗。首先其余的+q相当于当前的-q,然后注意到切开来的两条分别具有单调性,用3个队列维护即可。
T3:子集dp。险些爆零。
注意到不管怎么样当前编号最小的都要被打掉,那么不妨先打它,然后有用的抛物线其实只有O(N)条。枚举另外一个是哪只求出抛物线即可。
细节很坑爹,但是数据更水。
总的来说今年的题目其实比往年的要好,没有什么大的码农题,基本上都是靠想法;但是两天的T3难度都不大,因此造成AK的人似乎比往年多了不少。另外数据真是水的不行。
by lych
2016.12.4