ARC139
B. Make N
首先,如果 \(X\times A\le Y\) 那么花费 \(Y\) 的代价 \(+A\) 是无意义的;花费 \(Z\) 的代价 \(+B\) 同理。
把这些无意义的操作删掉,则优惠操作可能还有 \(0\) 或 \(1\) 或 \(2\) 种。
\(0\) 种和 \(1\) 种都很 naive。让我们考虑两种优惠操作都没被删掉的情况。
不妨设 \(A\le B\),那么当 \(B\ge \sqrt{n}\) 的时候 \(+B\) 的优惠操作使用次数是 \(\le \sqrt{n}\) 的,暴力枚举这个次数,则转化为了 \(1\) 种优惠操作的情况。
否则,说明 \(A\le B\lt \sqrt{n}\),注意到此时 \(+1\) 的次数是严格小于 \(A\) 次的,暴力枚举这个次数 \(c\),则转化成了解方程 \(Ax+By=n-c\)。显然取到最优秀的情况时,要么 \(x\) 最小,要么 \(y\) 最小(需要保证 \(x,y\) 同时为非负整数)。这是基本的数论知识。因为一次拓展欧几里得的最坏时间复杂度是 \(O(\log n)\),所以两部分情况加起来的时间复杂度为 \(O(T\sqrt n log n)\)。
D. Priority Queue 2
待补。
ARC140
C. ABS Permutation (LIS ver.)
首先思考不指定第一项的情况下怎么做。
我们发现对于任何 \(n\),都有两种最优秀的序列:
-
如果 \(n\) 是奇数,以 \(n=7\) 为例,可以构造出
4 5 3 6 2 7 1和4 3 5 2 6 1 7两种,都是 \(LIS=n-1\)。 -
如果 \(n\) 是偶数,以 \(n=6\) 为例,可以构造出
3 4 2 5 1 6和4 3 5 2 6 1两种,都是 \(LIS=n-1\)。
如果 \(X\) 就等于这里某个优秀序列的开头,那么直接输出即可。
否则我们随便找一个优秀序列,然后找到其中 \(X\) 的位置,把它换到最前面去,这样显然会有一个 \(LIS=n-3\) 的解。但事实上,我们可以让 \(LIS\) 始终 \(\ge n-2\)。
首先观察上面的两种优秀序列,其实长得非常像,只不过是把相邻的两项交换了一下而已。不难发现,必定存在一个优秀序列,使得 \(X\) 的位置后面还恰好有偶数个元素。
把 \(X\) 放到开头,然后把后面的偶数个元素两两交换,不难发现 \(LIS\) 变成了 \(n-2\)。
D. One to One
首先不连 \(a_i=-1\) 的边,经典结论是此时图只有三种形态:环、树、基环树。
环本质上也是基环树。这两种情况下肯定是内部 \(n\) 个点的 \(a_i\) 都 \(\neq -1\) 了。只有树,内部肯定存在一个点 \(a_i=-1\),就是说他还能往外连的。
然后可能是若干个树串联起来形成一个环,或者若干个树串成一条链,又放进一个基环树上去了。毕竟如果 \(a_i=-1\) 全替换掉以后,整张图肯定都是基环树的。
你发现第二种情况不用考虑,设初始基环树有 \(a\) 个,树有 \(b\) 个,则直接 \(ans+=a\times n^b\) 就行了,每种情况,所有基环树都作为一个连通块去添加贡献。
真正考虑的是若干个树串成一个环的情况。容易发现只和每颗树的大小有关,假设树的大小分别为 \(d_1,d_2,...,d_k\)。
由圆排列,有 \((k-1)!\) 种方式把它们串联起来。每种方式的串联方案数都是 \(\prod_{i=1}^{k}d_{i}\)。
然后做一个 \(n^2\) 的背包就行了,复杂度是 \(O(n^2)\) 的。事实上可以列出生成函数然后分治 NTT 做到 \(O(n\log^2 n)\)。
F. ABS Permutation (Count ver.)
待补。
ARC141
D. Non-divisible Set
做这道题之前,有一个经典的关于鸽巢原理的题目:从 \(1\sim 2M\) 中选出 \(M+1\) 个不同的数,总有两个相互整除的。
证明方法是这样的:把每个数写成 \(2^k\times x\) 的形式,其中 \(x\) 是奇数。然后,\(x\) 的取值只会是 \(1,3,...,2M-1\) 这 \(M\) 个数中的一个。显然分解后 \(x\) 相同的两个数是整除关系。而一共有 \(M\) 个不同的 \(x\),因此,选择 \(M+1\) 个数出来,至少有两个数的 \(x\) 会相同。
然后我们发现其实本题就是来自上面这个小题目......
应用与上面相同的分拆技巧。对于每个 \(x\),我们都必须选出一个 \(k_x\),使得 \(2^{k_x}\times x\) 在给出的集合内。另外,对于 \(x\neq y\),\(2^{k_x}\times x\mid 2^{k_y}\times y\) 不能成立。
注意到后面的这个约束比较烦,其实就是说如果 \(x\mid y\) 那么 \(k_{x}\gt k_{y}\) 必须成立。
所以最后相当于是对于每个 \(k_{x}\),给你了它的取值集合。然后要求对 \(x\mid y\) 都要满足 \(k_{x}\gt k_{y}\)。而指定一个元素被包含,就是指定了一个 \(k_{x}\) 的值。
事实上,确定了 \(k_{x}\) 后,我们希望 \(k_{1\sim x-1}\) 尽可能大,而 \(k_{x+1\sim 2m-1}\) 尽可能小。注意到这两部分分别是一个前后缀。而我们显然可以列一个状态 \(f(i)\) 然后从前往后计算 \(k_{i}\) 的合法最大值,类似地可以用 \(g(i)\) 从后往前计算 \(k_{i}\) 的合法最小值。如果能算出 \(f,g\),那么每次指定 \(k_{x}=V\) 的话,只要 \(f(k)\le V\le g(k)\) 就是有解的,反之无解。
时间复杂度 \(O(n\log n)\)。
Bonus:CF283D
E. Sliding Edge on Torus
待补。
F. Well-defined Abbreviation
待补。
ARC142
D. Deterministic Placing
神题。
首先,注意到有 \(S_{k}=S_{k\bmod 2}\)。换言之第二次操作后得到的点集应该就是初始点集。
然后,我们仅考虑第一次操作。假设 \(u\) 走到了 \(v\),则连 \((u,v)\) 的边。显然任何一个合法的点集,与树的一个链剖分形成对应。对合法点集计数转变为对合法链剖分计数。
链剖分不合法的原因是操作不唯一。具体地,设边 \((u,v)\) 的两端点在不同链中。则满足下列条件的时候,这个链剖分是不合法的:
-
\(u,v\) 有一个是链首,另一个是非链尾
-
\(u,v\) 有一个是链尾,另一个是非链首
注意到两个条件是对称的,这容易理解:因为我们不仅要保证 \(S_0\rightarrow S_1\) 唯一,还要保证 \(S_1\rightarrow S_0(S_2)\) 唯一。
有了这些限制,考虑 \(dp\)。显然我们最后只关注根节点所在的链的形态。具体而言,有七种状态:
-
\(x,y\) 是 \(u\) 子树内两不同点且 \(lca(x,y)=u\),此时 \(u\) 在链 \(x\rightarrow y\) 上。
-
\(x\) 是 \(u\) 子树内一点,此时 \(u\) 在链 \(x\rightarrow u\) 上。
-
\(x\) 是 \(u\) 子树内一点,此时 \(u\) 在链 \(u\rightarrow x\) 上。
-
\(x\) 是 \(u\) 子树外一点,此时 \(u\) 在链 \(u\rightarrow x\) 上。
-
\(x\) 是 \(u\) 子树外一点,此时 \(u\) 在链 \(x\rightarrow u\) 上。
-
\(x\) 是 \(u\) 子树内一点,\(y\) 是 \(u\) 子树外一点,此时 \(u\) 在链 \(x\rightarrow y\) 上。
-
\(x\) 是 \(u\) 子树内一点,\(y\) 是 \(u\) 子树外一点,此时 \(u\) 在链 \(y\rightarrow x\) 上。
运用上面的两个限制,\(f(u,1\sim 7)\) 是好计算的。时间复杂度 \(O(n\log n)\)。容易发现最难的转移就是 \(f(u,1)\) 的转移了。
另外需要注意到一些细节,比如 \(f(v)=0\) 导致没有逆元的情况。
E. Pairing Wizards
对于一对 \((x,y)\),我们不妨设 \(b_x\le b_y\)。然后,显然最终的 \(a_x,a_y\) 必须满足 \(a_x,a_y\ge b_x\)。所以,我们可以先将 \(a_x\) 和 \(a_y\) 对 \(b_x\) 取 \(\max\)。
设这样之后得到新的 \(a\) 数组记作 \(c\),那么初始答案要加上 \(\sum c_i-a_i\)。这一步是容易的。
此时,如果有 $(a_x\ge b_x \land a_y\ge b_y) \lor (a_x\ge b_y \land a_y\ge b_x) $ 成立,则 \((x,y)\) 这对约束已经满足条件,可以忽略。所有未被忽略的 \((x,y)\) 都满足 \(b_x\le a_x,a_y\lt b_y\)。如果我们想让 \((x,y)\) 最终合法,则只有两种可能:
-
让 \(a_y \ge b_y\)。
-
让 \(a_x \ge b_y\)。
注意到此时 \((a_i,b_i)\) 分成两类,第一类是 \(a_i\lt b_i\) 的,第二类是 \(a_i\ge b_i\) 的。对每一组 \((x,y)\) 而言,\(x\) 一定是第二类点,而 \(y\) 一定是第一类点。
对于每组 \((x,y)\),上面的条件必须至少满足一个。由于是二选一,容易让我们想到网络流:\(a_y\ge b_y\) 和第一类点有关,而 \(a_x\ge b_y\) 和第二类点有关。另外要注意的是,对于 \(a_y\) 来说,它要么不变,要么变为 \(b_y\)。这是容易证明的。
所以处理 \(a_y\ge b_y\) 是容易的,我们只要连 \(S\rightarrow i\) 边权为 \(b_i-a_i\) 即可。问题在于如何处理 \(a_x\ge b_y\) 的限制。首先我们注意到本题值域 \(\le 100\),考虑开 \(100\) 个点 \(f(x,1),f(x,2),...,f(x,100)\),然后这样连边:\(f(x,i)\rightarrow f(x,i+1)\) 连一条容量为 \(i-c_x\) 的边,表示要花 \(i-c_x\) 的代价可以让 \(a_x=i\)。然后 \(f(x,100)\) 向 \(T\) 连一条容量为 \(100-c_x\) 的边。最后,对于 \((x,y)\),只要连一条 \(y\rightarrow f(x,b_y)\) 的边,容量为 \(\infty\) 即可。事实上想到前面的预处理以及使用最小割后建图并不难理解。
设值域为 \(w=100\),则边数有 \(O(n^2+nw)\) 条,而 \(S\) 点向外连出的总容量不超过 \(nw\),所以只会增广 \(O(nw)\) 次,时间复杂度 \(O(n^3w+n^2w^2)\),最大流的特点使本题运行效率飞快。
F. Paired Wizards
对于第一个人,设其执行了 \(x\) 次 \(2\) 操作,分别在时刻 \(a_1,a_2,...,a_x\),则其造成的伤害为 \(\sum_{1\le i\le x} a_i-\frac{x(x+1)}{2}\),记 \(\sum_{1\le i\le x}a_i\) 为 \(S_1\)
我们对第二个人类似定义 \(y,b\) 与 \(S_2\)。则最后总伤害为 \(S_1+S_2-\frac{x(x+1)}{2}-\frac{y(y+1)}{2}\)。
对于一次操作 \((a,b,c,d)\)。我们称 \(x\) 是固定的当且仅当 \(a=c\);同理称 \(y\) 是固定的当且仅当 \(b=d\)。“固定”的含义是不管选择第一种组合,还是第二种组合,这个人执行的法术都是确定的。
显然,若 \(x\) 和 \(y\) 都是固定的情况没有任何需要我们额外再去做的事情。
当 \(x\) 和 \(y\) 仅有一个非固定的时候,我们可以决定非固定的那个是否使用法术 \(2\)。这将只会影响到 \(S_1\) 和 \(x\) 的取值(或 \(S_2\) 与 \(y\))。(第一类,第二类操作)
当 \(x\) 和 \(y\) 全部非固定的时候,有两种可能:
-
若 \(a=b\),则意味着两个人要么同时不使用法术 \(2\),要么同时使用法术 \(2\)。(第三类操作)
-
若 \(a\neq b\),则意味着两人恰好有一个使用法术 \(2\)。(第四类操作)。
需要注意到的一点是第四类操作中,不管是哪个人使用法术 \(2\),对 \(S_1+S_2\) 的贡献都是不变的,换言之此时唯一的变数在于对 \(\frac{x(x+1)}{2}+\frac{y(y+1)}{2}\) 的影响上。
我们可以暴力枚举有多少个第三类操作是“同时使用法术 \(2\)”的。我们发现为了让答案最大,我们会选择出现时间最晚的那些三类操作,显然对于一、二、四类操作有相同道理。此时再枚举第四类操作的分配,即设有 \(K\) 个第四类操作,则暴力枚举 \(K_x\) 个是第一个人使用法术 \(2\) 的,而剩下的 \(K-K_x\) 个是第二个人使用法术 \(2\) 的。那么此时我们已经有了一个临时的 \(S_1,S_2,x,y\)。我们还需要考虑第一类和第二类操作的贡献。我们注意到,第一类操作的贡献只和 \(x\) 有关,类似地第二类操作的贡献只和 \(y\) 有关。所以我们对第一类操作(第二类同理)进行这样一个预处理:暴力枚举这个临时的 \(x\),然后 \(O(n)\) 地计算此时第一类操作的最大贡献。
这样,总时间复杂度是 \(O(n^2)\) 的。

浙公网安备 33010602011771号