2021.11做题记录

東京 とうきょう

可以考虑 dp,按照最短路长度把点分层,发现要么这一层到下一层连边,要么是层之间连边
因为 2 可以随便取,所以实际上是求一个图的每个点的最短路长度之和
\(f[i][j]\) 表示 \(i\) 个点最后一层有 \(j\) 个点的方案数 \(g[i][j]\) 表示长度之和
转移的时候枚举 \(k\),从 \(f[i-j][k]\) 转移,这一层的每一个点必须至少和上一层的每一个点连边,也就是 \((2^k-1)^j\),同时层内还要连边,\(2^\binom{j}{2}\),还要乘上组合数
\(g\) 也是类似的转移
注意到对于每一个图,我们相当于 \(2\) 在每一个点都算了一次,所以我们还需要在最后的答案里乘上 \((n-1)^{-1}\)

code

新桥 しんばし

\(n\leq 20,q\leq 10^5\)

不难发现可以 \(\mathcal O(qn^2\log q)\) 利用线段树维护区间转移的值,但是显然是过不去的
所以我们考虑一种人类智慧方法
用两个栈维护,第一个栈维护 \(i\)\(m\) 的转移,第二个维护 \(m\)\(i\) 的转移
加入就在第二个栈加
删除如果第一个栈非空直接删
否则把第二个栈弹空扔到第一个栈里面,\(m\leftarrow r\)
查询直接两个栈合并一下
注意到一个操作最多被重构一次
因此操作均摊 \(\mathcal O(qn^2)\),查询单次 \(\mathcal O(n)\)
code

品川 しながわ

\(k\leq m\leq n\leq 10^{12},m\leq 4\)

\(n\) 比较小的时候特判掉

\[ans=\begin{cases} n & k=m=1 \\ \sum \lfloor\frac{n}{i}\rfloor-1 & m=2,k=1 \\ \binom{n}{2} & m=k=2 \\ \lfloor\frac{n}{3}\rfloor & m=3,k=1 \\ \sum \lfloor\frac{n}{i}\rfloor\cdot \lfloor\frac{i-1}{2}\rfloor & m=3,k=2 \\ \binom{n}{3} & m=k=3 \\ \lfloor\frac{n}{6}\rfloor+\lfloor\frac{n}{9}\rfloor+\lfloor\frac{n}{10}\rfloor+\lfloor\frac{n}{12}\rfloor+\lfloor\frac{n}{15}\rfloor+\lfloor\frac{n}{21}\rfloor & m=4,k=1 \\ \lfloor\frac{n}{11}\rfloor+\lfloor\frac{n}{29}\rfloor & m=4,k=2 \\ \sum \lfloor\frac{n}{i}\rfloor\cdot \dfrac{\binom{i}{2}-[i\%3]-3\lfloor\frac{i-1}{2}\rfloor}{6} & m=4,k=3 \\ \binom{n}{4} & m=k=4 \\ \end{cases} \]

可以直接求或者整数分块做
推柿子可以跑一个暴力或者直接手推

川崎 かわさき/CF1333E Road to 1600

非常非常好的思维题
其实这种题都是做完之后再来看非常简单。。。
我们希望王后被堵死,所以我们考虑构造一个王后被堵死的路
先考虑 \(n=3\) 的情况,其实也可以暴力枚举得到答案

\[1\ 7\ 6 \\ 3\ 2\ 5 \\ 4\ 8\ 9 \]

\(n\leq 2\) 的时候显然无解
考虑 \(n\geq 4\) ,我们可以用 1 2 3 4环绕右上角 \(3\times 3\) 的一周
然后再把 \(3\times 3\) 的统一加上 \(n^2-9\) 填在左上角就构造完了。。。

code

横滨 よこはま

和的期望的平方不等于和的平方的期望
因为 \(E(XY)=E(X)E(Y)\) 只在 \(X,Y\) 独立的时候成立
但是考虑子树合并的时候,这个时候就是相互独立的了
因此可以 dp,维护 \(f^1[u]\) 表示和的期望和 \(f^2[u]\) 表示和的平方的期望
转移有 \(f^2[u]=val[u]^2+\sum p(u,v)\times (f^2[v]+2f^1[u]f^1[v])\)
多次询问直接换根即可

code

戸塚 とつか/ ARC127D

考虑如何判断 \(a_i \oplus a_j\)\(b_i \oplus b_j\) 的大小关系,其实是这俩异或起来看最高位属于哪一个
所以对于 \(c_i=a_i \oplus b_i\) 来建一棵 trie 树
查询的时候就看一看,如果走向另一颗子树,就计算一下他们两个之间答案的贡献,否则他们两个在这一位是相同的,也就是 \(a_i \oplus a_j=b_i\oplus b_j\),所以随便找一个计算贡献即可
\(\mathcal O(n\log^2n)\)
code

posted @ 2021-11-06 10:52  YuukiYumesaki  阅读(56)  评论(0编辑  收藏  举报