csp-s模拟84
T1:
很容易想到直接开个堆,每次把最小的数取出,再分别乘上大于等于该数最大质因子的所有质数,把这些数再塞回堆里
发现TLE了……
需要一个O(n)的算法,考虑在题目中寻找单调性(蚯蚓???)
设第i次取出的数为xi,那么对于任意j<i,xj<xi,那么xj∗pk<xi∗pk
发现对于乘以同一个质数所产生的新数是单调的,所以可以用B个队列存储,每次比较所有队头元素
复杂度从O(nlogn)变为O(nB)(???)
T2:
毒瘤题
考虑设计状态fs,t表示已经有的质因数集合是s,已经有的在不同数中出现的质因数对集合为t
发现s的大小是26,t的大小是2(62)+6,发现存不下
但考虑定义会发现有很多状态是不合法的,所以可以记忆化搜索或用hash表存状态
具体转移可以枚举新加入的数所包含的质因数集合news,转移需满足该集合内出现的数对集合不能与原状态的t有交集
若可以转移,那么新状态的s′=s|news,t′=t|fs,news
(其中fi,j表示i集合与j集合所产生的新数对)
新状态的方案数即为原方案数乘以news的质因子集合的指数之积
T3:
考虑正确的很多,所以可以随机化,随机选两组,然后计算出各个参数后check正确的有多少个
麻烦的在于解方程,考试时是手解的,其实可以用高斯消元
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步