20250215 NOIP 模拟赛

A.diff

题面: 给定一个长为 n 的序列 A,将其重派为一个序列 B,使其是在 modM(M 是质数)意义下的等差数列。输出首项和公差,多组解任意输出一个或报告无解。(n105,M1e9+7)

题解:
首先我们可以证明对于一个首项和公差 (a,d)a,d[0,M) 他的前 M 项会使 [0,M) 的每个数都恰好出现一次,也即在第 M+1 次成环。

证明:考虑如果出现重复的数即有 a+kda(modM)kd0(modM),由于 M 是质数和 d<M,所以 k 一定是 M 的倍数,所以在前 M 项中都有 k<M,不会满足条件,那么 [0,M) 的每个数会出现一次。

我们任意找到两个数字,他们的差记为 kd。即公差的 k 倍。我们发现:

  • 如果 2nM,那么序列 A 中恰有 k 个数 x 满足 x+kd 不在 A 中,得到 d,然后检验若 xd 不存在,则 x 是首项。
  • 如果 2n>M,那么我们就对 A 取在 [0,M) 中的补集做上面的算法求得首项和公差,那原序列的公差和补集的公差是一样的,首项就是补集最后一项再加 d,因为这时会成环,所以 x+d 就是原序列的首项。

这样这个题就完成了。

为什么要以 2nM 的关系作为分界呢?

因为我们在获取到 kd 后计算 k 的时候,如果 2nM,由于前 M 个每个数只出现一次,那等差数列最后的 k 个数的 x+kd 都是还没有出现的数。如果 2n>M,那最后 k 个数中有若干个会成环而导致 k 少算。

B.pairs

题面: 求长为 n 且逆序对数也为 n 的排列个数。(n105)

题解:
我们考虑每次往一个 n1 的排列中加入 n 这个数,使其成为一个 n 的排列,考虑我们加入 n 的时候,序列中所有数都小于 n,所以我们可以操作使序列增加 [0,n1] 个逆序对。
f[i][j] 表示长为 i 的排列有 j 个逆序对的方案数,有转移 f[i][j]=j(i1)jf[i1][j]

那么我们可以进一步的观察 j 这一维的变化发现,题目即求一个序列 a 满足 ai=n,ai<i 的方案数。考虑容斥:
对于一个集合 S{1,2,,n},设 sum(S)iSi。那么答案就是

S(1)|S|(nsum(S)+n1n1)

表示的组合意义就是,考虑集合 S 中的数不满足 ai<i,那我们先把 S 中的数 ai 都先放上 i 个,剩下的 nsum(S) 个随便放给 n 个人。这样就保证 S 中的数都一定不满足条件,其余放任自流,容斥系数是 (1)|S|

考虑求出所有的 |S|sum(S),设 f[i][j] 表示集合大小为 isum(S)j 的方案数。转移考虑两种操作:

  • 一种是将当前集合内所有数全部 +1。即 (f[i][j]f[i][j+i]) 例如 {1,2,3}{2,3,4}
  • 一种是将当前集合内所有数都 +1,再加入一个 1。即 (f[i][j]f[i+1][j+i+1]) 例如 {2,3,4}{1,3,4,5}

对于每一个集合,有且只有一种操作方案得到,即 倒推操作 如果当前集合没有 1,那上一步就是操作一,否则就是操作二,所以每个集合都正好会被算一次。

复杂度:枚举 j 上界是 ni 加等差数列次之后 j 就会至少是 n,所以 i 只有 O(n) 个,总复杂度 O(nn)

C.unicom

题面: 给一个 n 个点 m 条边的无向图满足 (u,v)E,|uv|KQ 次询问,每次给出 [L,R],问只保留 [L,R] 内的点和边有多少联通块。(n,Q105,K5)

题解:
区间询问但可以离线。考虑分治,将询问离线之后猫树,因为只有 mid 向左右的 K 个点会对另一半有影响,所以从 mid 向左右处理只保留 [i,mid][mid+1,j] 之间的点和边的联通块数和 mid 左右 K 的并查集,合并的时候还原所有的 2K 个并查集,再暴力加至多 K2 条边即可。复杂度 O(nlog2n+QK2logn)

注意并查集合并时要让离 mid 更远的点连到离 mid 更近的点上,这样只还原 mid 周围点的时候才对。

D.similar

题面: 给定一个长为 n 的序列 AQ 次询问,每次给定 a,b,c,d,判断区间 [a,b][c,d] 中的元素排序后对应位置上是否至多只有一个不同。(n,q,ai105,ba=dc)

题解:
考虑怎么判断两个区间符合条件:将其间的元素桶排之后,要么全部相同,否则第一个不同的桶和最后一个不同的桶必须正好互补,并且中间不能有值。

使用权值线段树来桶排,用 hash 判断区间是否全部相同 (hash 的作用和套路要敏感),套上可持久化消去区间限制,第一个不同的位置可以线段树二分,全是套路。

posted @   programmingysx  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示