NOIP十连 day2 | #3647. 随机打乱 | #3648. 猜数

NOIP十连 day2

前两题太简单了!


3647. 随机打乱

给定 \(n\) 个区间 \([l,r]\),每个区间有属性 \(a\),等于 \(l/r\) 之一,保证所有端点互不相同。

\(S=\emptyset\)。对每个区间依次执行:

  • \(S\cap[l,r]=\emptyset\),令 \(S\leftarrow S\cup {a}\)

随机打乱这 \(n\) 个区间,问 \(|S|\) 的期望。

\[n\le 10^3 \]


考虑顺序确定之后区间序列为 \(R\),我们做这样的流程。

依次枚举每个区间 \(R_i\),对于所有 \(i<j\) 满足 \(a_i\in R_j\) 删去 \(R_j\)

那么最后 \(|R|\) 即为所求 \(|S|\),原因是考虑 没被删去 等价于 \(S\)无交

那么考虑没被删去的区间都被包含于 \(S\) 中点划分出的区间。

不难设计区间 dp: \(F(l,r)\) 表示所有 \(\subseteq [l,r]\) 的区间的 \(|S|\) 的期望。

转移有,枚举 \(R_i\subseteq [l,r]\),贡献 \(\frac1m(F(l,a_i-1)+F(a_i+1,r))\),其中 \(m\) 为区间个数。\(\mathcal O(n^3)\)

从大往小枚举 \(l\),过程中维护 \(S_r=\sum F(a_i+1,r)\),然后从小往大枚举 \(r\),上式第一项均摊 \(\mathcal O(n)\) 维护。总复杂度即可 \(\mathcal O(n^2)\)


启示(?):

  • 在某类转移需求 条件\(P\),而 条件\(P\) 依赖以前的选择时,可以转而考虑在选择时就删去将会使得 条件\(P\) 不满足的对象,以获得更简洁的限制条件。(某种意义上的贡献预累积(?

3648. 猜数

交互库有隐藏的 \(1\le y\le10^{18}\),每轮可以询问 \(x\)

  • 交互库会选择返回 \(y\bmod x\) 或者 \(\left\lfloor\dfrac yx\right\rfloor\) 之一。

试在 \(4\) 轮询问内找出 \(y\)


考虑若 Judger 返回 \(y\bmod x=t\),即得 \(y=kx+t\)

若 Judger 返回 \(\left\lfloor\dfrac yx\right\rfloor=t\),即得 \(tx\le y<tx+x\)

若干次询问后第一类限制条件可以 CRT 合并为 \(y\equiv t\pmod X\)。第二类限制条件可以并出一个区间 \([L',R']\)

也即 \(y=kX+t\)\(k\in [L,R]\)。不妨记 \(D=R-L+1\)

在此基础上,若询问 \(x\)

  • 若返回 \(y\bmod x=t\),不妨取 \(x\)\(X\) 互质,那么 \(X'=X\cdot x\)\(D'\le\lceil\frac Dx\rceil\)
  • 若返回 \(\lfloor\frac yx\rfloor=t\),有 \(D'\le\lceil\frac xX\rceil\)

可以发现我们不管如何总能限制 \(D'\) 的值。初始有 \(D=10^{18}\),所求即在 \(4\) 次询问内将 \(D\) 限制至 \(1\)

而这个过程仅与 \(X,D\) 有关,不妨记 \(F(X,C)\) 表示当钦定一开始的 \(X\) 的情况下,最大的 \(D\) 使得 \(D'\) 能在 \(C\) 次询问内后限制至 \(1\)。即 \(D'\le F(X,C-1)\) 总成立。

因此对于我们选择的 \(x\),有

\[\begin{cases} D'\le\left\lceil\frac xX\right\rceil\le F(X,C-1) \\ D'\le\left\lceil\frac{F(X,C)}x\right\rceil\le F(X\cdot x,C-1) \end{cases} \]

\(F(X,C-1)\)\(E\),有:

\[\begin{cases} x\le X\cdot F(X,C-1) \\ F(X,C)\le xf(X\cdot x,C-1) \end{cases} \]

为使 \(x\perp X\),不妨取 \(x=X\cdot F(X,C-1)-1\),当 \(X=1\) 时取 \(x=F(X,C-1)\)。边界处取得 \(F(X,1)=\max(X-1,2)\)

alt text

写个暴力计算可以发现 \(4\) 次询问实际上可以确定大约 \(4\times 10^{137}\) 这么个范围内的数。那么应该是足够的(?

实现时维护 \(X,L,R\),按上述算法构造参数即可。


启示(?):

  • 遇到较为复杂的转移可以先写成子问题递归的形式,再单独考虑这一步,写出转移式再仔细分析。
posted @ 2026-09-14 21:04  CuteNess  阅读(10)  评论(0)    收藏  举报