数学题 4
一堆东西不知放哪儿就放这儿了。
1
遇到一道题,转化后长这样:
Statement
给出 \(n(\le 10^{10})\),计算:
多组数据,答案对 \(10^9+7\) 取模。
Solution
当时看数据范围以为要用某种根号时间来计算,就一直想不出来,交了暴力就走了
之后打表发现 \(Ans(n)=2^n-1\)。。。
知道结论后你当然有一百万种方法去证他,这里写一个:
熟悉 7FA4 的朋友们马上就知道这个问题严格弱于 H4.1.6.2(那篇 blog 的 T1)
H4.1.6.2(节选,需仔细看):
设 \(T_0=\sum_{i=1}^n2^i\),则 \(T_0=2^{n+1}-2\)
设 \(T_1=\sum_{i=1}^ni2^i\),则 \(2T_1=\sum_{i=1}^ni2^{i+1}=\sum_{i=1}^{n+1}(i-1)2^i\)
\(T_1=2T_1-T_1=n2^{n+1}-\sum_{i=1}^n2^i=n2^{n+1}-T_0=(n-1)2^{n+1}+2\)
我们把通项式子代入马上就出来了:
证完了。
2
整除分块右边界简单算法:
上取整可用同样方法来算.
如果让你计算如下形式
其中 \(f\) 的前缀和容易求,应该怎么做?
一种简单想法是,继续使用之前的整除分块那一套:
做完了,复杂度呢?
复杂度 \(=\) 不同的 \(\left\lfloor\dfrac n{i^2}\right\rfloor\) 的个数,有多少种不同的 \(\left\lfloor\dfrac n{i^2}\right\rfloor\) 他的复杂度就是多少。
实际上他只有 \(O(n^{\frac13})\) 种,下面进行证明:
- 若 \(\left\lfloor\dfrac n{i^2}\right\rfloor>n^{\frac13}\):则 \(\dfrac{n}{i^2}>n^{\frac13}\),即 \(i^2<n^{\frac23}\),即 \(i<n^{\frac13}\),此时最多 \(n^{\frac13}\) 种。
- 若 \(\left\lfloor\dfrac n{i^2}\right\rfloor\le n^{\frac13}\):显然最多 \(n^{\frac 13}\) 种。
证完了。也就是他的复杂度为 \(O(n^{\frac 13})\)。
更一般地,对于 \(\left\lfloor\dfrac n{i^k}\right\rfloor\),按 \(B=n^{\frac 1{k+1}}\) 进行分类讨论,可以得到其种类数为 \(O(n^{\frac 1{k+1}})\) 的。
3
Statement
两个可重集 \(A,B\),\(A\) 初始只有数 \(0\),给出 \(B\) 中有哪些数,一直操作直到 \(B\) 中没有数:
- 从 \(B\) 中选出一个数,移到 \(A\) 里面
- 给答案加上 \(A\) 中所有数的平均数
求答案的期望,数的个数 \(\le 2\cdot 10^7\).
Solution
考虑每个数对答案的贡献,做完了。
4
Statement
有 \(n\) 个机器,每个机器随机生成 \([L_i,R_i]\) 中的一个实数。
你要从第 \(1\) 个机器开始,做一个游戏:
- 当前机器生成一个数。
- 你可以选择这个数,然后结束游戏。
- 或者放弃这个数,到下一个机器。
求你在让期望答案最大的策略下,期望答案是多少。\(n \le 10^6\).
Solution
设你当前在第 \(i\) 台机器,如果你知道接下来会得到什么数,策略显然是:若当前机器生成的数小于他,就继续;否则停止。
那么我们从后往前计算最大的期望答案,这时你已经知道若继续的期望答案是多少了。
这时我们这样想:无论接下来的操作多么不确定,他在我们的心中就是确定的,若继续,得到的答案一定就是期望答案,因为这就是我们所期望的答案。(抽象)
于是我们知道接下来一定会得到什么数,像刚刚那么操作即可。
5
Statement
计算 OEIS A178047,\(n \le 10^6\)。
一个通俗的定义是,有两个数 \(a,b\) 初始为 \(1\),每次可以给 \(a\) 加 \(b\) 或给 \(b\) 加 \(a\),求使其中一个数变为 \(n\) 的最小次数。
Solution
用二元组 \((a,b)\) 表示一个状态,考虑如果已知最终状态,如何还原成 1 1
,显然辗转相除即可。
此时一个想法是对于每个最终状态 \((n,b)\) 都算一遍答案,取最小值。
发现如果 \(n\) 与 \(b\) 不互质就凑不出来,于是只取与 \(n\) 互质的 \(b\)。
int Calc(int x, int y) {
int res = 0;
for (; y; res += x / y, x %= y, swap(x, y));
return res;
}
6
Statement
已知 \(n,k,a,b\),求:
其中 \(n\le 10^{12},k\le 5\cdot 10^4, 1\le a,b<998244353\)。
答案对 \(998244353\) 取模。
Solution
令 \(p=ab^k\),\(\displaystyle Ans=\sum_{i=0}^np^iC_{nk}^{ik}\)
考虑二项式定理,\(C_n^m=[x^m](x+1)^n\)
故若不考虑 \(p^i\) 系数,有 \(Ans=[x^0]((x+1)^{nk}\bmod (x^k-1))\),P3746 = TR.1.11.14 就做完了。
那考虑的话怎么办呢,比较妙的有 \(Ans=[x^0]((x+1)^{nk}\bmod (x^k-p))\),然后做完了。
想到了倒数第二步,没想到最后一步,被吊打 T^T。