首页 > 其他分享 >Codeforces Round #853 (Div. 2) 题解

Codeforces Round #853 (Div. 2) 题解

时间:2023-02-26 11:23:46浏览次数:56  
标签:le frac 853 题解 复杂度 mid sqrt Div

Codeforces Round #853 (Div. 2) 题解

ABCD

Codeforces Round #853 (Div. 2) | 萌新实况被吊打 | ABCD 题解

E. Serval and Music Game

分两种情况讨论:

  1. \(\lfloor\frac{s_n}{x}\rfloor=\lceil\frac{s_n}{x}\rceil\).
  2. \(\lfloor\frac{s_n}{x}\rfloor + 1=\lceil\frac{s_n}{x}\rceil\).

对于第一种,\(x\mid s_n\),即查询 \(s_i\) 中 \(k=\frac{s_n}{x}\) 的倍数有几个。

显然 \(k\mid s_n\),则当 \(k\mid s_i\) 时,显然有 \(k\mid \gcd(s_i, s_n)\)。那么我们可以把 \(s_i\) 扔到 \(cnt_{\gcd(s_i, s_n)}\) 上,查询的时候我们遍历 \(s_n\) 的因子,找出所有 \(k\mid d\mid s_n\),然后统计 \(cnt_d\)。

这一步的时间复杂度是 \(O(n\log s_n + s_n)\)。(一共有 \(\sqrt {s_n}\) 种 \(k\),遍历因子是 \(\sqrt {s_n}\) 的)

对于第二种,设 \(k=\lfloor\frac{s_n}{x}\rfloor\),则查询 \(s_i=pk + q(k+1)\),则 \(s_i\bmod k \le \lfloor\frac{s_i}{k}\rfloor\) 时都成立。

换个角度考虑,\(pk + q(k + 1)\) 可以表示出 \(ak + b~(b\le a)\),所有区间即为 \([k, k + 1], [2k, 2k + 2],\dots\)

对 \(s_i\) 在值域上做前缀和即可 \(O(1)\) 查询这些区间。

看起来这里似乎有 \(\frac{s_n}{k}\) 个区间,但实际上当 \(a\ge k\) 的时候,就已经可以表示任何数了。所以只有 \(k\) 个区间。

若 \(k\le \sqrt {s_n}\),我们暴力计算上面那些 \(O(k)\) 个区间。

对于 \(k\ge \sqrt{s_n}\),显然 \(ak + b\le s_n \to a\le\frac{s_n}{k}=\sqrt {s_n}\),所以区间也只有 \(O(\sqrt s_n)\) 种。

所以对于任意一个 \(k\),查询都是 \(O(\sqrt {s_n})\) 的,一共有 \(O(\sqrt {s_n})\) 个 \(k\),时间复杂度 \(O(s_n)\)。

总时间复杂度 \(O(n\log s_n + s_n)\)。

F. Serval and Brain Power

有一个限制条件是 \(k\lvert T'\rvert \le \lvert S\rvert = 80\)。

我们对左边这个式子平衡规划。

对于 \(k< 5\) 时,显然 \(k=2\) 包含 \(k=4\)。

考虑 \(k=2\),我们暴力枚举 \(S = S_1 + S_2\) 的 \(O(n)\) 种拆解方式,然后做 \(\operatorname{LCS}(S_1, S_2)\)。dp 的时间复杂度是 \(O(n^2)\) 的,这里的总时间复杂度是 \(O(n^3)\) 的。

考虑 \(k=3\),同理的,枚举 \(S=S_1 + S_2 + S_3\) 的 \(O(n^2)\) 种拆解方式,然后做 \(\operatorname{LCS}(S_1, S_2, S_3)\)。dp 的时间复杂度是 \(O(n^3)\) 的,总时间复杂度是 \(O(n^5)\) 的。

有一个好事是,显然我们的拆解方式是不满的。我们考虑这个过程的组合意义。我们把 \(n\) 个白球和 \(5\) 个黑球排成一列,求本质不同的方案数。

这里的第 \(2\) 和第 \(4\) 个黑球是序列的拆解方案数,而 \(1, 3, 5\) 可以放在任意位置,方案数为 \(\prod \vert S_i\vert\)。

则方案数为 \(\binom{n+5}{5} \approx 3\times10^7\),还是很稳的。

对于 \(k\ge 5\),显然有 \(\vert T'\vert \le 16\),并且 \(T'\) 出现了 \(5\) 次以上。如果把 \(S\) 划分为五段长度相等的部分,则 \(T'\) 至少会完整地出现在某个段中。

于是我们对每个段,\(O(2^{16})\) 枚举所有可能的子序列,并进行一次 \(O(n)\) 的贪心匹配。时间复杂度 \(5\times2^{16}\times 80 = 2\times10^7\),也是很稳的。

标签:le,frac,853,题解,复杂度,mid,sqrt,Div
From: https://www.cnblogs.com/lingfunny/p/17156323.html

相关文章

  • 【题解】ARC157
    AtcoderRegularContest157AXXYYX可以考虑得到\(a,b,c,d\)后如何构造,实际上是先根据\(b,c\)铺出形如XYXYXYXYX的序列,之后每存在一个XX或YY就填进去一个X......
  • 练习记录-cf-div2-853-(A-C)
    从11月打的只能写两题现在尽量3题了就在这里慢慢记录下练习吧看到成长也是学习的动力之一(补题会继续写,但不一定补的来今日总结:还是只会写简单思维题的菜狗(今天居然是20......
  • AcWing 第 92 场周赛 C题 4866. 最大数量 题解
    原题链接链表+并查集乱搞做法:思路首先可以发现,想要让度数尽量大,那我们应该构造成菊花图,即下图所示:对于每个需求,我们可以知道,如果之前他们没有连在一起,那我们一定得......
  • [WC/CTS2023] 楼梯 题解
    题目链接简要题意有一块楼梯,这里指的楼梯是倒着的,正过来看上一层宽度一定小于等于这一层宽度,并且由格子组成,你需要对其进行增删和恢复某一历史版本的操作,并回答这块楼梯......
  • 适用于初学者的CF1654E Arithmetic Operations题解
    题目让我们求改变数字的最少次数,那我们转化一下,求可以保留最多的数字个数\(cnt\),再用\(n\)减一下就行,即\(res=n-cnt\)。我们先考虑两种暴力方法。第一种暴力方......
  • CF717A Festival Organization 题解
    传送门首先考虑求出长度为\(i\)的合法串的个数。很明显可以想到用dp解。设\(f_{i,0/1}\)为长度为\(i\)最后一位为\(0/1\)的合法串个数。可以很容易想到转移......
  • ABC267D 题解
    前言题目传送门!更好的阅读体验?两篇题解的代码写得很复杂,我是没有想到。思路很显然对于一个点,它必定会进入一个循环节。如何判断它进入循环节了呢?当一个点被经过两次,......
  • CF1383E 题解
    题意传送门给定一个长度为\(n\)的01串\(a\)。在一次操作中,你可以选择任意一个\(i\in[1,|a|)\),令\(a_i=\max(a_i,a_{i+1})\),然后将\(a_{i+1}\)删除。你可以进行......
  • AtCoder Beginner Contest 287 A-F 题解
    比赛链接A-Majority先这样再那样最后这样,就是这样。点击查看代码#include<cstdio>#include<algorithm>#include<cstring>usingnamespacestd;intn,a;char......
  • AtCoder Beginner Contest 286 A-G 题解
    比赛链接A-RangeSwap根据题意,分段输出。点击查看代码#include<cstdio>#include<algorithm>#include<cstring>usingnamespacestd;constintN=105;intn,......