闲话 22.10.24
闲话
晚上在外面逛了几圈
所以今天的闲话发得比较的晚
感觉生活水平需要提升于是在找游戏人生的壁纸(
所以有好心人投喂几张吗(
今日模拟赛有交互题
“不保证评测交互库和下发交互库相同”
然后可以直接调用交互库里的函数
连namespace的名称都没改
连变量名都没改
三行就能ac是吧
[今天脑内循环的还是Aster 很推荐去看看!]
[霓虹的世界……]
杂题
好在我还留了一道题没写
要不然没东西可写了(
定义 \(N\) 的整数拆分为满足 \(\sum_{i=1}^n a_i = N \text{ s.t. } a_i > 0\) 的有序序列 \(a_i\)。定义一个 \(N\) 的整数拆分 \(a_i\) 的权值为 \(\prod_{i=1}^n F_{a_i}\),其中 \(F_i\) 为斐波那契数列,满足 \(F_0 = 0, F_1 = 1, F_i = F_{i-1} + F_{i-2}\)。
给定 \(N\),求其整数拆分权值之和对 \(10^9+7\) 取模的值。
\(N \le 10^{10000}\)。
某人无意识中出了这题的弱化版。所以写了。
通过长时间的研究我们发现了计算对于 \(n\) 的整数拆分的总数有一个很简单的递推式,但是因为这个递推式实在太简单了,如果出这样的题目,大家会对比赛毫无兴趣的。
- 来自题面
其实确实。
我们考虑先生成这个 \(n\) 的整数拆分的总数。假设 \([x^n]F(x)\) 为答案,不难发现我们可以将其拆分为由 \(i\) 个整数生成的方案数的总和。当前是由全体正整数生成,因此立得
然后自然推广得到假设用数列 \(G(x)\) 来取 \(n\) 的拆分数,若 \([x^n]F(x)\) 为答案则有
回到题目。由斐波那契数列的递推式不难得到斐波那契数列的生成函数
因此有答案数列
到这里有两种做法(
1. 直接做
我们不难得到分母 \(\frac 1 {1 - 2x - x^2}\) 对应数列 \(a_i\) 的递推式:
考虑分子的贡献:
因此得到答案的递推式,直接做矩乘就是 \(O(\log n)\) 的。但是还可以接着推。
考虑斐波那契数列通项公式的求法。我们设 \(a_n = pa_{n-1}\),得到
解得
直接设
带入特值能得到
整理得到
考虑 \(x^2 \equiv 2 \pmod{10^9 + 7}\) 的解。扔进什么板子里能得到 \(x =59713600\)。带入计算就可以 \(O(\log n)\) 求解。
答案减一即可。
2. 部分分式分解
根据部分分式定理,考虑待定系数得到
然后就是一通对比系数。这部分是 dirty work,总而言之我们能得到
化简可以得到和 1. 相同的结论。
于是我们得到了递推式。在读入时将 \(n\) 对 \(10^9 + 6\) 取模即可。
code
#include <bits/stdc++.h>
using namespace std;
#define int long long
#ifdef ONLINE_JUDGE
char buf[1<<21], *p1 = buf, *p2 = buf; inline char getc() { return (p1 == p2 and (p2 = (p1 = buf) + fread(buf, 1, 1<<21, stdin), p1 == p2) ? EOF : *p1++); }
#define getchar getc
#endif
#define rep(i,a,b) for (register int i = (a), i##_ = (b) + 1; i < i##_; ++i)
#define pre(i,a,b) for (register int i = (a), i##_ = (b) - 1; i > i##_; --i)
const int mod = 1e9 + 7, phi_m = mod - 1, sqrt_2 = 59713600;
int n;
int qp(int a, int b) { int ret = 1; for (; b; a = 1ll * a * a % mod, b >>= 1) if (b & 1) ret = 1ll * ret * a % mod; return ret; }
signed main() {
char c; while (isdigit(c = getchar())) n = (1ll * n * 10 + c - '0') % phi_m;
cout << 1ll * sqrt_2 * 250000002 % mod * (qp(sqrt_2 + 1, n) - qp(1 - sqrt_2 + mod, n) + mod) % mod;
}
以下是博客签名,与正文无关。
请按如下方式引用此页:
本文作者 joke3579,原文链接:https://www.cnblogs.com/joke3579/p/chitchat221024.html。
遵循 CC BY-NC-SA 4.0 协议。
请读者尽量不要在评论区发布与博客内文完全无关的评论,视情况可能删除。