「考试」noip模拟1

2021/5/22 18:25:16

本文主要是介绍「考试」noip模拟1,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

序列

首先可以发现,当公比不为 1 时,序列的长度最多是 \(\log\) 值域
所以应该试着把复杂度往这个性质上优化一下
暴力判断合法有 60 分,但是这个 zz 写挂了
考虑怎么把公比确定下来,然后发现只要确定两个数,公比就可求
如果两个数为 \(x,y\) 且 \(x\) 被 \(y\) 整除,那么这个公比一定是从 \(\frac x y\) 里提取的,就是说满足 \(q^k=\frac x y\)
那么把 \(\frac x y\) 质因数分解,各质因数的次数间取最大公因数,就可以求出最小的由两数确定的公比
这样一来,只要有两个数,就可以得到公比
那么可以枚举每一个序列开始的 \(a_i,a_{i+1}\),然后向后直到不能加进序列,并用 set 判重
因为 \(q\leq 1000\) 的限制,所以在 \(\frac x y\) 有 1000 以上因子时应当跳过
由开头得到的性质,似乎可以保证复杂度几乎为 \(O(n)\) (筛,分解质因数和set的复杂度都不是很高)

熟练剖分

题解没太看懂QAQ所以复读一下赵sir的神仙做法
因为是 n 方 dp,所以可以想到一维结点,另一维表示轻链长度
这样一来就可以直接用定义式算出期望,所以只需要 dp 求出各状态的概率即可
在转移时,可以这样来处理随机选重链的过程:在转移用的临时数组另开一维 0/1 代表是否已经选了重链
然后就有已选 -> 已选,未选 -> 已选,未选 -> 未选三种转移
最后按定义式算答案即可

建造游乐园

首先得到一个结论:答案即为 n 个点的无向连通欧拉图个数与 \(C_{n-1}^2\) 的乘积
证明:因为两个无向连通欧拉图之间的转化会且仅会更改 2 条边,所以在它基础上加边/减边可以逆推出所求,且是不重不漏的
那么现在的问题转化成了 n 个点的无向连通欧拉图个数
由求无向联通图个数的相似方法可以做到 \(O(n^2)\) 求解
其中 n 个点的无向欧拉(不保证联通)图个数为 \(2^{C_{i-1}^2}\)
这是因为可以对于 n-1 个点的任意图,把其中度数为奇数的点向点 n 连边(这些点的个数一定是偶数),得到一个欧拉图



这篇关于「考试」noip模拟1的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程