2025.2.15 noip模拟赛

T1

题目大意:

有一个互不相同数组,现请你找出一对整数 x,d,使得能找到一个长度为 n 的排列 p,使得 api=((i1)×d+x)modm,输出任意一组解即可。
n105m109+7, mp0ai<m

解题思路:

首先考虑当 2×nm 时,任意找一对整数,设他们差是 kd,其中 d 为公差,那么考虑快速求出 k。
考虑 ai 中只有 nk 对整数满足差值为 kd,所以这样就能快速地求出 k。
但当 2×n>m 时,这是错的。
因为我们可能会出现整数 i, 假设他们在最终的序列里的位置为 x
那么可能会出现 v(x+k)modm=v(xk)modm 的情况,因为 kd 的上界是 n-1 的,所以可能会有 (2×n2)modm0 的情况。

但这种情况直接取反集即可。
因为 (mn)×m

总结:
感觉挺需要脑洞的。
下次看到这种类型的题,可以先找一下有什么性质。
就比如 m 是质数,就能保证 gcd(kd,m) = 1。
然后枚举其实也可以不用特别呆板。
可以枚举类似乘积的东西,然后考虑其中一个因子有什么性质。

T2

题目大意:

给定一个 n,求长度为 n 的排列中有多少逆序对数为 n
n105

解题思路:

先考虑暴力 dp。
dpi,j 表示长度为 i 的排列,逆序对为 j 的方案数。

然后发现转移就可以抽象成:
求有多少长度为 n 的数组 a,使得 ai<i,且 a 之和为 n
由于要求 ai<i 这种条件比较难搞,所以我们可以改成容斥原理,枚举集合 S,强定 S 不满足条件。
那么设 dpi,j 表示 ax=x 的个数有 i 个,和为 j。
那么有两种转移:

  1. dpi,j=>dpi+1,j+1+i
  2. dpi,j=>dpi,j+i

可以证明这是可以全部转移到的。
第一个转移的意思就是新加进一个不合法的数字,由于要求不一样,所以要将其他的+1。
第二个转移就是直接整体 +1。

所以这样是 O(n1.5) 的,因为 in0.5 级别。
总结:
挺套路的,但感觉这种不好直接对限制做 dp 可以通过容斥将问题转化的更简单。

T3

题目大意:

给定一个 n 个点,m 个边的图。
保证了 uvk,k5 然后有 q 个询问,每个询给定 l,r,问你只保留 lr 的点时有多少联通块。
n,q105

赛时思路:

就是考虑暴力分块,当块长足够大时,那么只有相邻两个块才会有交集。
所以时间复杂度就是 O(n1.5×k2logn)
卡不过去...

解题思路:

考虑在线不好做,那么离线考虑。
由于合并一次时间复杂度是 O(klogn) 起步的,然后莫队自带了 O(n1.5),想不删除还得大常数回滚莫队,基本没有前途。

考虑猫树,预处理出 mid+1r 的联通块个数以及 mid+1mid+k 的并查集的状态。

时间复杂度:O(q×logn×k2)
路径压缩的常数。

总结:
分块的优势在于能够比较慢地支持修改以及一些复杂地查询,不过时间复杂度较高,得先确定没有更优地算法再写。

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