Educational Codeforces Round 33 (Rated for Div. 2)
Educational Codeforces Round 33 (Rated for Div. 2)
提交记录
https://codeforces.com/contest/893/status
D
为了尽可能防止钱数 \(>d\),所以设置一个下界 \(lv\) 来判断是否有解:也就是每次必要充钱(就是当晚有查询操作,但钱数 \(lv\) 为负)的时候,尽可能地少充钱(\(lv:=0\))。如果即便是这样的这样的策略还是会出现一天晚上钱数 \(>d\) 的情况就必然无解。
为了尽可能减少充钱次数,设置一个上界 \(rv\) 得到最优解:每次充钱的时候都让 \(rv:=d\),如果得到当天的钱后钱数 \(>d\) 那就让 \(rv:=d\) 即可。
E
考虑对 \(x\) 进行质因数分解,每个质因数之间贡献互不影响,对于一个质因数 \(p\),记其次数为 \(c\),相当于向 \(y\) 个位置分配 \(c\) 个数,记相应位置分配的个数为 \(a_i\),那么我们有 \(\sum_{i=1}^y a_i = c\),且 \(a_i\in[0,c]\),根据隔板法,方案数为:\(C_{c+y-1}^{y-1}\)。
而分配负号对上面的问题也是独立的,只需求向 \(y\) 个位置分配偶数个负号的方案数,根据二项式系数就可以发现这是 \((t+1)^y\) 的偶次项系数和 \(2^{y-1}\)。
F
查询 \(u\) 子树中距离 \(u\) 不大于 \(k\) 的所有节点点权的最小值。
考虑对深度建立主席树,那么查询节点 \(u\) 的时候,就只需要从深度(记树的最大深度为 \(lim\))为 \(\min(dep[u]+k, lim)\) 对应的主席树中找到标号 \(\in [dfn[u], dfn[u]+sz[u]-1]\) 的最小值即可。
其中 \(dfn[u]\) 代表整棵树中 \(u\) 的 \(dfs\) 序,\(sz[u]\) 代表 \(u\) 所在子树的大小。