Loading

ARC200 小记

A (Dot Product)

题意

给定 \(n,a_{1\sim n},b_{1\sim n}\),求 \(x_{1\sim n}\),使得:

  • \(x_i\in [-10^8,10^8]\)

  • \(\sum \limits a_ix_i>0\)

  • \(\sum \limits b_ix_i<0\)

\(1\le n,a_i,b_i\le 2\times 10^5\)

题解

多枚举思路容易想到分析二元情况(不过我有点唐初始分析错了)。

发现若 \(\frac{a_i}{b_i}<\frac{a_j}{b_j}\),可以构造 \((x_i,x_j)=(-a_i-b_i,a_j+b_j)\)

于是若 \(\frac{a_i}{b_i}\) 全相等则无解,否则如上构造。

\(\bf{record}\)

B (LCM)

题意

给定 \(a_1,a_2,a_3\),记 \({\cal{Len}(x)}\) 表示 \(x\) 的位数。

请判断是否存在正整数 \(x,y\),满足:\({\cal{Len}}(x)=a_1,{\cal{Len}}(y)=a_2,{\cal{Len}}(\text{lcm}(x,y))=a_3\)。若存在给出构造。

\(1\le a_1,a_2,a_3\le 17\)

题解

估计大小:\(\max(x,y)\le \text{lcm}(x,y)\le xy\)。于是 \(\max(a_1,a_2)\le a_3\le a_1+a_2\),否则无解。

不妨 \(a_1\le a_2\),接下来尝试构造所有有解。

我们假设一个基本结构:\(x=p10^u,y=q10^v,p,q,10\) 两两互质,\({\cal{Len}}(p)+u=a_1,{\cal{Len}}(q)+v=a_2\)

\({\cal{Len}}(\text{lcm}(x,y))={\cal{Len}}(\text{lcm}(p,q))+\max(u,v)=a_3\)

但是 \({\cal{Len}}(\text{lcm}(p,q))\) 仍然不好刻画。我们钦定 \(p=1\)\(q=1\)

稍微分析一下,我们可以构造:\(x=10^{a_1-1},y=10^{a_1+a_2-a_3-1}(10^{a_3+1-a_1}-1)\)

  • 但是此时 \(a_1+a_2=a_3\) 就坠机了。

随便想想,构造 \(x=5\times 10^{a_1-1}+1,y=5\times 10^{a_2-1}\) 即可。这样能避免 \(a_1,a_2=1\)Corner Case

\(\bf{record}\)

C (Movie Theater)

题意

给定 \(n\) 和两个长为 \(n\) 的序列 \(l_{1\sim n},r_{1\sim n}\)

一家电影院有 \(n\) 个座位,从左到右排成一排。

\(n\) 个人依次来这家电影院看电影。你为每个人分配了一个座位。假设 \(p_i\) 是分配给 \(i\) 的座位。

\(i\)\(l_i\) 到达,穿过座位 \(1, 2, \dots, p_i - 1\) 坐到座位 \(p_i\)。在 \(r_i\) 离开,穿过座位 \(1, 2, \dots, p_i - 1\) 离开。

在开区间 \((l_i,r_i)\) 的时间段内,其他人穿过座位 \(p_i\) 的次数就是 \(i\) 的不满意。

\(1\sim n\) 的字典序最小排列 \(p\),使得从 \(1\)\(n\) 的所有人的总不满意度最小。

\(1\le n\le {\color{red}{5\times 10^5}},1\le l_i,r_i\le 2n\),保证所有 \(l_i,r_i\) 互不相同。

题解

这里给出一个 \(\mathcal{O}(n\log n)\) 的做法。

这题发现对一对点算贡献比较好刻画。

考虑第 \(i\) 个人和第 \(j\) 个人之间的贡献。令 \(S_i=[l_i,r_i]\)

  • \(S_i\)\(S_j\) 不相交,则不会产生贡献;
  • \(S_i\)\(S_j\) 相交但不包含,则贡献恒为 \(1\)
  • \(S_i\) 包含了 \(S_j\),则 \(j\) 的座位在 \(i\) 前面更优,否则会产生 \(2\) 的贡献。

因此对于包含区间 \(S_j \sube S_i\),要求 \(p_j < p_i\),把图建出来是一个 DAG,那就是要求字典序最小的 逆拓扑序,也就是前置题目。

具体做法就是把图 建反图,每次找到入度被清零的 编号最大 的点,拓扑序倒序 放入这个点,用堆维护编号最大。

这个做法看着很违反直觉,具体证明和思路最后再说。


但是这样直接建图是 \(\mathcal{O}(n^2)\) 的,我们考虑 数据结构优化建图

反图的连边 是形如 \(l_i\le l_j,r_j\le r_i\Rightarrow i\to j\)

考虑二维数点咋做这题就咋做。

按照 \(r\) 从小到大扫描,每次 加入 就往 \(l_x\) 前缀 对应树状数组节点加入点 \(x\)

加入就是类似前缀和连边。设当前树状数组某个点 \(i\) 代表了 \(b_i=u\),那么新建点 \(v\),连边 \(v\to u,v\to x\),然后 \(b_i=v\)

然后 查询 就找到 \(l_x\) 后缀 对应的树状数组节点,连边 \(x\to b_i\) 即可。

前缀对应的树状数组节点形如 for(;w;w&=(w-1)),后缀形如 for(;w<=2*n;w+=w&-w)

这样点边数均为 \(\mathcal{O}(n\log n)\)。然后注意加入的 虚点 用队列而不是堆维护,避免退化到 \(\mathcal{O}(n\log^2 n)\)

\(\bf{record}\)


来看最小的 逆拓扑序,最朴素的想法是每次找到入度被清零的,编号最小的点加入。

  • 但是小的点藏在很大的点后面就坠机了。

考虑逆序字典序的限制依次形如:\(1\) 放的位置最小,\(2\) 放的位置最小,一直到 \(n\) 放的位置最小。

考虑 原图中出度\(0\) 的所有点,把其他的放入 \(n\) 一定劣与放最大的。并且这些点的放置不影响其他点!

于是每次放最大的,删除递归即可。就是上面说的过程。

D (|A + A|)

题意

给定 \(m,k\),判断是否存在 \(n\) 以及数列 \(a_{1\sim n}\),使得:

\[\vert\{(a_x+a_y)\bmod m,1\le x,y\le n\}\vert=k \]

并且 \(n\in [1,m],a_i\in [0,m-1],a_i\) 两两不同。如果可以要求给出构造。

\(T\) 组多测,\(T,\sum m\le 2\times 10^5,0\le k\le m\)

题解

猜一手合法的 \(k\) 很多。摸一些构造:

\(k\) 是奇数的时候,构造 \(\left\{0,1,2,\cdots,\frac{k-1}{2}\right\}\) 即可覆盖 \([0,k-1]\)

然后经典套路是挖掉一个数变成 偶数,这里显然考虑挖掉 \(1\)

构造 \(\left\{0,2,3,\cdots,\frac{k}{2}\right\}\) 即可覆盖 \([0,k]\backslash\{1\}\)

注意这里 \(2,3\) 必须出现,即 \(k\ge 6\)


考虑 \(k=2\),容易发现当且仅当 \(2\mid m\),构造 \(\left\{0,\frac{m}{2}\right\}\) 即可。


考虑 \(k=4\)打表发现 当且仅当 \(4\mid m\) 成立,构造 \(\left\{0,\frac{m}{4},\frac{2m}{4},\frac{3m}{4}\right\}\) 即可。

具体证明考虑当 \(k=4\) 时,集合大小只能是 \(3,4\),然后分讨哪几个相等。

\(\bf{record}\)

E (popcount <= 2)

题意

\(T\) 组多测,给定 \(n,m\),求长度为 \(n\),值域为 \([0,2^m-1]\) 的数列 \(a\) 的个数,满足:

\[\forall 1\le i,j\le n,\text{popcount}(a_i\text{ xor }a_j)\le 2 \]

\(P=998244353\) 取模。

\(T\le 2\times 10^5,2\le n,m<P\)

题解

接下去用 \(pc\) 表示 \(\text{popcount}\)​。

不妨所有数异或第一个数,即 \(a_1=0\)。这样限制了所有数 \(pc\le 2\),答案 \(\times 2^m\)

分讨 \(pc=2\) 的数集长啥样。

没有 \(pc=2\)

\[ans=(m+1)^{n-1} \]

一个 \(pc=2\)

首先 \(2^x+2^y\) 中,选择 \(x,y\) 的方案数有 \(\dbinom{m}{2}\)

于是 \(a_{2\sim n}\) 的选择范围为:\(\{0,2^x,2^y,2^x+2^y\}\),并且 \(2^x+2^y\) 必须出现。

容斥一下,方案数为 \(4^{n-1}-3^{n-1}\)

\[ans=\dbinom{m}{2}(4^{n-1}-3^{n-1}) \]

\(pc=2\) 的数异或和为 \(0\)

具体的,\(pc=2\) 的数形如:\(S=\{2^x+2^y,2^y+2^z,2^z+2^x\}\)​,\(x,y,z\) 的选法共 \(\dbinom{m}{3}\) 种。

你发现不能有 \(pc=1\) 的数。

于是 \(a_{2\sim n}\) 的选择范围为:\(S\cup \{0\}\),并且 \(S\) 中数必须出现。

你钦定 \(T\sube S\) 的数 不出现,方案数为 \(f(T)=(4-|T|)^{n-1}\)

\[\begin{aligned}ans&=\dbinom{m}{3}\sum\limits_{T\sube S}(-1)^{|T|}f(T)\\&=\dbinom{m}{3}(4^{n-1}-3\times 3^{n-1}+3\times 2^{n-1}-1)\end{aligned} \]

其他情况

钦定 \(x\),答案 \(\times m\)。你先假设有俩 \(2^x+2^y,2^x+2^z\),然后不能有 \(2^y+2^z\)

摸摸性质,发现其他数必定为 \(2^x+2^t\),否则就能异或出 \(pc>2\)

于是 \(a_{2\sim n}\) 的选择范围为:\(S=\{0,2^x\}\cup\{2^x+2^{t}:t\neq x\}\)。并且一定要出现至少两个不同的 \(2^x+2^t\)

定义恰好 \(x\) 个的方案数为 \(f(x)\),则 \(ANS=all-f(0)-f(1)\)

显然 \(all=(m+1)^{n-1},f(0)=2^{n-1}\)

考虑 \(f(1)\),有 \(m-1\) 种选择 \(t\) 的方案数,接下来每个数在 \(\{0,2^x,2^{x}+2^t\}\) 中选择,\(2^{x}+2^t\) 至少出现一个。

\(f(1)=(m-1)(3^{n-1}-2^{n-1})\)

\[ans=m\cdot ANS=m((m+1)^{n-1}-(m-1)3^{n-1}+(m-2)2^{n-1}) \]


把这几个答案加起来 \(\times 2^m\) 就是最终答案。

\(\bf{record}\)

posted @ 2025-07-26 18:41  HaHeHyt  阅读(27)  评论(0)    收藏  举报