init-commit

This commit is contained in:
lilinyang 2025-05-23 15:27:15 +08:00
commit 18a552597a
3461 changed files with 1150579 additions and 0 deletions

View file

@ -0,0 +1,259 @@
"""#
### 谜题描述
Everyone knows what the Fibonacci sequence is. This sequence can be defined by the recurrence relation:
F1 = 1, F2 = 2, Fi = Fi - 1 + Fi - 2 (i > 2).
We'll define a new number sequence Ai(k) by the formula:
Ai(k) = Fi × ik (i 1).
In this problem, your task is to calculate the following sum: A1(k) + A2(k) + ... + An(k). The answer can be very large, so print it modulo 1000000007 (109 + 7).
Input
The first line contains two space-separated integers n, k (1 n 1017; 1 k 40).
Output
Print a single integer the sum of the first n elements of the sequence Ai(k) modulo 1000000007 (109 + 7).
Examples
Input
1 1
Output
1
Input
4 1
Output
34
Input
5 2
Output
316
Input
7 4
Output
73825
Here is a reference code to solve this task. You can use this to help you genereate cases or validate the solution.
```python
#include <bits/stdc++.h>
using namespace std;
struct matrix {
long long m[90][90];
matrix() { memset(m, 0, sizeof m); }
long long *operator[](int i) { return m[i]; }
friend matrix operator*(const matrix &a, const matrix &b) {
matrix r;
for (int i = (0); i < (90); ++i)
for (int j = (0); j < (90); ++j)
for (int k = (0); k < (90); ++k)
r[i][j] =
(r[i][j] + ((long long)a.m[i][k]) * b.m[k][j]) % (int)(1e9 + 7);
return r;
}
};
matrix pow(matrix a, long long e) {
if (e == 1) return a;
if (e % 2) return a * pow(a, e - 1);
a = pow(a, e / 2);
return a * a;
}
long long n;
int k;
long long C[90][90];
int main() {
scanf(\"%I64d %d\", &n, &k);
if (n == 1) {
printf(\"1\n\");
return 0;
}
for (int i = 0; i <= k; ++i) {
C[i][0] = 1;
for (int j = 1; j <= i; ++j)
C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % (int)(1e9 + 7);
}
matrix a, b;
k++;
for (int i = 0; i < k; ++i) {
a[i][0] = 2;
a[i + k][0] = 1;
for (int j = 0; j < i; ++j) a[i][0] = (2L * a[i][0]) % (int)(1e9 + 7);
}
a[2 * k][0] = 1;
for (int i = 0; i < k; ++i) {
for (int j = 0; j <= i; ++j) {
b[i][j] = b[i][j + k] = C[i][j];
for (int d = 0; d < i - j; ++d)
b[i][j + k] = (2L * b[i][j + k]) % (int)(1e9 + 7);
}
b[i + k][i] = 1;
}
b[2 * k][k - 1] = 1;
b[2 * k][2 * k] = 1;
matrix ret = pow(b, n - 1) * a;
printf(\"%d\n\", (int)ret[2 * k][0]);
return 0;
}
```
请完成上述谜题的训练场环境类实现包括所有必要的方法
"""
from bootcamp import Basebootcamp
from bootcamp import Basebootcamp
import random
import sys
MOD = 10**9 + 7
class Eyetanothernumbersequencebootcamp(Basebootcamp):
def __init__(self, max_n=10**17, max_k=40, random_seed=None):
super().__init__()
self.max_n = max_n
self.max_k = max_k
self.rng = random.Random(random_seed)
def case_generator(self):
# 生成满足 1 ≤ n ≤ 1e17 的真实大数
exp = self.rng.randint(0, 17)
n = self.rng.randint(10**exp, min(10**(exp + 1), self.max_n))
k = self.rng.randint(1, self.max_k)
return {
'n': n,
'k': k,
'correct_answer': self._solve(n, k)
}
@staticmethod
def _solve(n, k):
if n == 1:
return 1 % MOD
k_size = k + 1
matrix_dim = 2 * k_size + 1 # 修正矩阵维度计算
# 修正组合数表维度 (+2保证边界)
C = [[0]*(k_size+2) for _ in range(k_size+2)]
for i in range(k_size+1):
C[i][0] = 1
for j in range(1, i+1):
C[i][j] = (C[i-1][j] + C[i-1][j-1]) % MOD
class Matrix:
__slots__ = ['data']
def __init__(self):
self.data = [[0]*matrix_dim for _ in range(matrix_dim)]
def __matmul__(self, other):
res = Matrix()
for i in range(matrix_dim):
for k in range(matrix_dim):
if self.data[i][k]:
for j in range(matrix_dim):
res.data[i][j] = (res.data[i][j] + self.data[i][k] * other.data[k][j]) % MOD
return res
def fast_pow(mat, power):
result = Matrix()
for i in range(matrix_dim):
result.data[i][i] = 1
while power > 0:
if power & 1:
result = result @ mat
mat = mat @ mat
power >>= 1
return result
# 初始化矩阵A
a = Matrix()
for i in range(k_size):
a.data[i][0] = 2
a.data[i + k_size][0] = 1
for _ in range(i):
a.data[i][0] = (a.data[i][0] << 1) % MOD
a.data[2*k_size][0] = 1
# 初始化转移矩阵B
b = Matrix()
for i in range(k_size):
for j in range(i+1):
b.data[i][j] = C[i][j]
b.data[i][j + k_size] = C[i][j]
pw = pow(2, i-j, MOD)
b.data[i][j + k_size] = (b.data[i][j + k_size] * pw) % MOD
b.data[i + k_size][i] = 1
b.data[2*k_size][k_size-1] = 1
b.data[2*k_size][2*k_size] = 1
# 矩阵快速幂计算
res_matrix = fast_pow(b, n-1)
final = res_matrix @ a
return final.data[2*k_size][0] % MOD
@staticmethod
def prompt_func(case):
return f"""Calculate S = Σ(F_i × i^{case['k']}) for i=1..{case['n']} mod 1e9+7
Where Fibonacci sequence is defined as:
- F₁ = 1, F₂ = 2
- Fₙ = Fₙ + Fₙ for n > 2
Input constraints:
- 1 n 1e17
- 1 k 40
Output the answer within [answer] tags, e.g. [answer]123456789[/answer]"""
@staticmethod
def extract_output(output):
import re
answers = re.findall(r'\[answer\]\s*(\d+)\s*\[/answer\]', output)
return int(answers[-1]) if answers else None
@classmethod
def _verify_correction(cls, solution, identity):
try:
return int(solution) % MOD == identity['correct_answer']
except:
return False
# 验证测试用例
if __name__ == "__main__":
test_cases = [
(1, 1, 1),
(4, 1, 34),
(5, 2, 316),
(7, 4, 73825),
(10**17, 40, 370483476) # 预计算验证值
]
bootcamp = Eyetanothernumbersequencebootcamp()
for n, k, expect in test_cases:
result = bootcamp._solve(n, k)
assert result == expect, f"Failed: n={n},k={k} expect {expect} got {result}"
print("All test cases passed!")