GJOI noip_csp训练赛2

posted on 2025-09-04 12:15:24 | under | source

战况

100 + 100 + 0 + 100 = 300。大部分时间在划水,这是简单场。

A. 买礼物 gift

题意:\(n\) 个二元组 \((a_i,b_i)\),每个二元组选一个,最小化“被选的 \(a\) 的最大值”与“被选的 \(b\) 的最大值”的差。\(n\le 2\times 10^5\)

\(a\) 排序,枚举 \(\max a=a_i\),后面的只能选 \(b\)、前面的可以任意选一个 \(b\) 作为 \([1,i)\) 的最大值。只需考虑离 \(a_i\) 最近的 \(b\) 即可。\(O(n\log n)\)

B.追忆 recall

题意:求 \(1\le x,y\le n\) 满足 \(\frac xy\) 是十进制下有限小数的个数。\(n\le 10^{12}\)

等价于 \(p=\frac y{\gcd(x,y)}\) 只能有 \(2,5\) 质因子。统计分数形如 \(\frac {qk}{pk}\) 其中 \(p,q\) 互质,枚举 \(p,k\)\(q\) 个数易算,为 \(\le \frac nk\) 且没有 \(2,5\) 因子的个数。直接整除分块即可。

现在是两支 \(\log\),但是发现整除分块过程与 \(p\) 并没啥关系,预处理出每个块前缀和即可二分回答。\(O(\sqrt n+\log^3n)\)

C. 状元桥 run

P10207 [JOI 2024 Final] 马拉松比赛 2 / Marathon Race 2

  • 记序列去重后有 \(n\) 个球,注意到最优情况下每次走一步多一个球花费也是平方的。于是 \(n\le 1000\) 才能有解。

  • 显然重复经过一个球在最后一次拿起它最优,考虑依次确定每个球最后一次经过的顺序,则任意时刻经过的球构成前后缀关系。

于是直接区间 dp 即可,同时首次经过必然是 \(1/n\)、最后经过只能为 \(t\) 左右最近的两个。\(O(n^2+L)\)。偷懒写二分。

总结:观察性质题,前者根据数据范围不难猜到,而后者虽然很浅显但是不易推导出前后缀性质。中位紫。

D. 舞会 party

P10208 [JOI 2024 Final] 礼物交换 / Gift Exchange

先考虑判定。按 \(a\) 排序,对每个 \(i\) 求出能送它礼物的后缀 \([p_i,n]\),有 \(p_i\le i\)。考虑 Hall 定理,枚举子集中最靠左的元素为 \(i\),那么假如 \(p_i<i\) 则相连右部点至少 \(i\) 个一定合法;故非法必须有 \(p_i=i\),此时若 \(\forall j>i,p_j>i\) 即非法。

将原序列排列,记 \(id_i\)\(i\) 在原序列中的位置。区间内的元素即为其一个子序列废话。考虑对每个 \(i\) 找到使它非法的区间。依次刻画条件:

  • \(l\le id_i\le r\)
  • \(p_i=i\) 意味着 \([p_i,i)\) 不能有元素被选。记 \(L,R\)\([p_i,i)\) 内按 \(id\) 排序在 \(id_i\) 左右两侧的值,则 \(L<l,r<R\)
  • \(\forall j>i,p_j>i\) 意味着 \((i,n]\)\(p_j\le i\) 的也不能被选。限制形如上面也是 \(L<l,r<R\) 状物。

\(l,r\) 视为二维数点,限制对应过来就是一个矩形非法,容易扫描线单 log。

考虑求 \(L,R\),以刻画 \(p_i=i\) 的部分为例。从左到右依次加入元素,问题形如“求一个前缀中值 \(< id_i\) 的最大值”,线段树二分即可。总的复杂度还是 \(O(n\log n)\)

代码有点长但易调。也可以进一步推导或者一眼看出简化版充要条件为“不存在 \(b_i<b_j<a_i<a_j\)”,应该好写很多。但像我这种呆瓜选手显然不会推出这一步。

总结:这题没有什么跳跃性步骤,可以由“Hall 定理找充要条件 \(\to\) 对每个点刻画非法条件并找非法区间 \(\to\) 转二维数点扫描线”机械推导出来。

posted @ 2026-01-13 12:17  Zwi  阅读(0)  评论(0)    收藏  举报