AGC044(F未做)

A

倒过来搞,关键位置只有\(2,3,5\)的倍数,由于每次是除以一个数,关键位置仅有\(60^3\)

B

这题为啥比A简单...

C

显然,当前位置与初始位置是一一对应的
对三进制\(N\)位建trie,特殊的是,根到叶子节点是从低位到高位
每个叶子节点的位置对应着当前所处的位置,每个叶子节点的编号对应着初始的位置

操作一:每个点交换\((1,2)\)儿子。这个可以打标机
操作二:考虑最低位,\(0\longrightarrow 1\)\(1\longrightarrow 2\)\(2\longrightarrow 0\)然后进位。儿子\((0,1,2)\longrightarrow (2,0,1)\),然后递归当前\(0\)儿子(也就是\((2,0,1)\)中的\(2\)

D

首先对每个字符,单独一个字符,查询

  • 若得到的答案均相同,说明每个字符均出现在字符串中。则\(L=\)查询\(+1\)
  • 若得到的答案不同,显然仅有两种答案,\(L=\)较大答案

这样我们得到了字符串的长度\(L\)

对每个字符,长度为\(L\)的串,查询。
这样我们得到了每个字符出现的次数

结论:对于\(S,T(|S|\le |T|)\),其编辑距离为\(|T|-|S|\)的充要条件为\(S\)\(T\)的子序列
根据此结论,我们可以对字符进行合并。
具体而言,令\(f(S)\)(其中\(S\)是字符集的子集)在字符串中的最大子序列。
对于\(f(S),f(T)(S\cap T=\emptyset)\),可以通过\(O(f(S)+f(T))\)次查询合并

E

\(f_i\)\(i\)位置最大值,显然:\(f_i=max(a_i,\frac{f_{i-1}+f_{i+1}}{2}-b_i)\)
有个不需要啥技术含量的\(O(n^2)\),就是\(a_i\)从大到小,每次更新一个位置,然后用这个位置更新其他的
通过推式子大概会得到一个麻烦的等差数列为系数的东西,用线段树维护。\(O(nlogn)\)

不过会被卡精度

考虑若\(b_i=0\),对于固定的两点\(u,v\),去更新其他点

\[\begin{cases} P_u=a_u \\ P_v=a_v \\ P_i=\dfrac {P_{i-1}+P_{i+1}}2 & i \in (u,v) \end{cases}\]

\[P_i = \dfrac {(i-u)a_v+(v-i)a_u}{v-u} (i \in [u,v]) \]

这是个以\((u,a_u),(v,a_v)\)为端点,其连线为\(P_i\)的东西,可以用凸包维护

但我们实际的式子是这样的

\[\begin{cases} P_u=a_u \\ P_v=a_v \\ P_i=\dfrac {P_{i-1}+P_{i+1}}2-b_i & i \in (u,v) \end{cases}\]

我们考虑构造\(\{c\}\),使得\(P_i'=P_i-c_i\)以满足较简式子

\[\begin{cases} P'_u=a_u-c_u \\ P'_v=a_v-c_v \\ P'_i = \dfrac {P_{i-1}+P_{i+1}}2-b_i -c_i = \dfrac {P'_{i-1}+P'_{i+1}}2-b_i-c_i+\dfrac {c_{i-1}+c_{i+1}}2 & i \in (u,v) \end{cases}\]

序列\(\{c\}\)需满足:\(b_i = \dfrac {c_{i-1}+c_{i+1}}2-c_i\)
\(c_1=c_2=0,c_{i+1}=2(b_i+c_i)-c_{i-1}\)即满足条件

posted @ 2020-07-03 22:47  Grice  阅读(102)  评论(0编辑  收藏  举报