模拟测试20190815(已更新)

%%%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树状数组优化一下就好了

posted @ 2019-08-16 06:34  mikufun♘  阅读(158)  评论(0编辑  收藏  举报