Cry_For_theMoon  

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 14 3 5 2 6 1 7 两种,都是 \(LIS=n-1\)

  • 如果 \(n\) 是偶数,以 \(n=6\) 为例,可以构造出 3 4 2 5 1 64 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)\) 的两端点在不同链中。则满足下列条件的时候,这个链剖分是不合法的:

  1. \(u,v\) 有一个是链首,另一个是非链尾

  2. \(u,v\) 有一个是链尾,另一个是非链首

注意到两个条件是对称的,这容易理解:因为我们不仅要保证 \(S_0\rightarrow S_1\) 唯一,还要保证 \(S_1\rightarrow S_0(S_2)\) 唯一。

有了这些限制,考虑 \(dp\)。显然我们最后只关注根节点所在的链的形态。具体而言,有七种状态:

  1. \(x,y\)\(u\) 子树内两不同点且 \(lca(x,y)=u\),此时 \(u\) 在链 \(x\rightarrow y\) 上。

  2. \(x\)\(u\) 子树内一点,此时 \(u\) 在链 \(x\rightarrow u\) 上。

  3. \(x\)\(u\) 子树内一点,此时 \(u\) 在链 \(u\rightarrow x\) 上。

  4. \(x\)\(u\) 子树外一点,此时 \(u\) 在链 \(u\rightarrow x\) 上。

  5. \(x\)\(u\) 子树外一点,此时 \(u\) 在链 \(x\rightarrow u\) 上。

  6. \(x\)\(u\) 子树内一点,\(y\)\(u\) 子树外一点,此时 \(u\) 在链 \(x\rightarrow y\) 上。

  7. \(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)\) 最终合法,则只有两种可能:

  1. \(a_y \ge b_y\)

  2. \(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)\) 的。

提交记录

posted on 2022-05-25 21:30  Cry_For_theMoon  阅读(148)  评论(0)    收藏  举报