数学题 4

一堆东西不知放哪儿就放这儿了。

1

遇到一道题,转化后长这样:

Statement

给出 \(n(\le 10^{10})\),计算:

\[ n+\sum_{i=0}^{n-1}i\cdot 2^{n-i-1} \]

多组数据,答案对 \(10^9+7\) 取模。

Solution

当时看数据范围以为要用某种根号时间来计算,就一直想不出来,交了暴力就走了

之后打表发现 \(Ans(n)=2^n-1\)。。。

知道结论后你当然有一百万种方法去证他,这里写一个:

\[ \begin{aligned} Ans(n) &= n + \sum_{i=0}^{n-1}i\cdot 2^{n - i - 1}\\ &= n + \sum_{i=0}^{n-1}(n-i-1)\cdot 2^i\\ &=n+(n-1)\cdot\sum_{i=0}^{n-1}2^i-\sum_{i=0}^{n-1}i\cdot 2^i \end{aligned} \]

熟悉 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\)

我们把通项式子代入马上就出来了:

\[ \begin{aligned} Ans(n)&=n+(n-1)\cdot(2^n-1)-((n-2)2^n+2)\\ &=n+n\cdot 2^n-2^n-n+1-n\cdot 2^n+2\cdot 2^{n}-2\\ &=2^n-1 \end{aligned} \]

证完了。

2

整除分块右边界简单算法:

\[ \left\lfloor\dfrac{n}{i}\right\rfloor=k\\ k\le\dfrac{n}{i}<k+1\\ ik\le n\land i(k+1)>n\\ \dfrac{n}{k+1}<i\le\dfrac{n}{k} \]

上取整可用同样方法来算.

如果让你计算如下形式

\[ \sum_{i=1}^{n=10^{14}}f(i)\cdot\left\lfloor\dfrac{n}{i^2}\right\rfloor \]

其中 \(f\) 的前缀和容易求,应该怎么做?

一种简单想法是,继续使用之前的整除分块那一套:

\[ k=\left\lfloor\dfrac{n}{l^2}\right\rfloor\\ k\le\dfrac{n}{i^2}<k+1\\ i^2\le\dfrac nk,i^2>\dfrac n{k+1}\\ \dfrac{n}{k+1}<i^2\le\dfrac nk\\ \sqrt{\dfrac n{k+1}}<i\le\sqrt{\dfrac nk}\\ \left\lfloor\sqrt{\dfrac n{k+1}}\right\rfloor+1\le i\le\left\lfloor\sqrt{\dfrac nk}\right\rfloor\\ r=\left\lfloor\sqrt{\dfrac nk}\right\rfloor \]

做完了,复杂度呢?

复杂度 \(=\) 不同的 \(\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\),求:

\[ \sum_{i=0}^na^ib^{ik}C_{nk}^{ik} \]

其中 \(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。

posted @ 2024-08-20 21:26  Laijinyi  阅读(6)  评论(0编辑  收藏  举报