%%%skyh
这次考得什么玩意啊,三道题丝毫想不到正解,骗分又不会骗,只有打打暴力才能维持得了生活这样子一道比一道神
上来对着T1的表看了2h,尝试了矩阵,组合数均无果只得打了个树状数组的暴力,2h20min,得分15pts
然后打T2暴力(没错我已经放弃正解了orz),爆搜+20pts特判,不知怎的挂了5pts,得分45pts
然后码T3暴力,然而暴力并不会打导致递归爆栈,MLE 0
总分15+45+0=60,rank......5?!?
真是神(du)奇(liu)的一场考试
T1:数论
(极不友善的题目)
根据观察(打表+瞎猜)可知,数据范围内的良好的整数很少
那么如果我们可以较快地筛出所有优秀的数,就可以做到O(1)回答询问
怎么筛呢,我们最开始已知1是良好的数,考虑用其进行扩展
每次枚举一个质数p,用已知可能是良好的数x进行扩展(x*p0,x*p1......),得到一个候选集合S
从小到大扫S中每一个元素,同时维护约数个数前k+1大值,若一个元素约数个数小于第k+1大值就舍弃
那么我们质因子应枚举至多少呢,我们发现一个数包含尽量小的质因子时才更可能是良好的数,经实践,p<=293足以通过本题
当然我们可以考虑迭代至稳定的思想,判断是否好几次筛完都没有发生改变
复杂度O(max(p)*n*logk*log(m))
未完待续(咕了)
T2:位运算
考试时候以为是搜索剪枝,然而只会搜索不会剪枝,拿了暴力和两个特判分就溜了
正解dp,我们发现我们不关心能得到的过程数是什么,只关心数中1的个数
设f[i][j]表示第i位得到位数为j的方案数
对于&,|,^分类讨论转移则可,转移过程顺便记录可行方案(任一)
若最终f[n][(c中1的个数)]不为0,则递推回去寻找可行方案
每次相当于寻找(位数为s)opt(位数为a[i])==now的一组可行解
分类讨论则可
T3:旅行
好神啊好神啊好神啊
直接统计方案不好统计,我们不妨按照数位dp中逐位确定的思想来解决本题
显然我们应该从b[1]进行dfs,寻找脱离限制的方案数
先用换根dp得出从其他点出发的方案数
然后从b[1]进行dfs,只沿着b走,用一个全局变量维护现在脱离控制的方案数
用线段树or树状数组优化一下就好了