【矩阵乘法】幼儿园数学题II(ssl 2514)

2024-01-29 23:48

本文主要是介绍【矩阵乘法】幼儿园数学题II(ssl 2514),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

幼儿园数学题II

ssl 2514

题目大意

给出式子
f ( 1 ) = 1 , f ( 2 ) = 1 f(1)=1,f(2)=1 f(1)=1,f(2)=1
f ( n ) − f ( 3 ) − f ( 4 ) − f ( 5 ) − . . . − f ( n − 3 ) − f ( n − 2 ) = ( n + 4 ) ( n − 1 ) / 2 f(n)-f(3)-f(4)-f(5)-...-f(n-3)-f(n-2)=(n+4)(n-1)/2 f(n)f(3)f(4)f(5)...f(n3)f(n2)=(n+4)(n1)/2
让你求前n项的和(对 1 0 9 + 7 10^9+7 109+7取模)

输入样例#1

1

输出样例#1

1

输入样例#2

2

输出样例#2

2

数据范围

0 ⩽ n ⩽ 2 31 − 1 0\leqslant n\leqslant 2^{31}-1 0n2311

解题思路

f ( n ) = ( n + 4 ) ( n − 1 ) / 2 + f ( 3 ) + f ( 4 ) + f ( 5 ) + … + f ( n − 3 ) + f ( n − 2 ) f(n)=(n+4)(n-1)/2+f(3)+f(4)+f(5)+…+f(n-3)+f(n-2) f(n)=(n+4)(n1)/2+f(3)+f(4)+f(5)++f(n3)+f(n2)
n很大,不能直接递推
考虑矩阵乘法
对于后面的一堆 f f f我们可以用前缀和
我们设矩阵
[ s i − 2 f i − 1 ( n + 4 ) ⋅ ( n − 1 ) 2 n 1 ] \begin{bmatrix}s_{i-2} & f_{i-1} & \frac{(n+4)\cdot (n-1)}{2} & n & 1\end{bmatrix} [si2fi12(n+4)(n1)n1]
s i − 1 = s i − 2 + f i − 1 s_{i-1}=s_{i-2}+f_{i-1} si1=si2+fi1
f i = ( n + 4 ) ⋅ ( n − 1 ) 2 + s i − 2 f_{i}=\frac{(n+4)\cdot (n-1)}{2}+s_{i-2} fi=2(n+4)(n1)+si2
( n + 4 ) ⋅ ( n − 1 ) 2 \frac{(n+4)\cdot (n-1)}{2} 2(n+4)(n1)展开得到 n 2 + 3 ⋅ n − 4 2 \frac{n^2 + 3\cdot n - 4}{2} 2n2+3n4
( ( n + 1 ) + 4 ) ⋅ ( ( n + 1 ) − 1 ) 2 = ( n + 5 ) ⋅ n 2 = n 2 + 5 ⋅ n 2 = n 2 + 3 ⋅ n − 4 + 2 ⋅ n + 4 2 = ( n + 4 ) ⋅ ( n − 1 ) 2 + n + 4 \frac{((n+1)+4)\cdot ((n+1)-1)}{2}=\frac{(n+5)\cdot n}{2}=\frac{n^2 + 5\cdot n}{2}=\frac{n^2 + 3\cdot n - 4+2\cdot n + 4}{2}=\frac{(n+4)\cdot (n-1)}{2}+n+4 2((n+1)+4)((n+1)1)=2(n+5)n=2n2+5n=2n2+3n4+2n+4=2(n+4)(n1)+n+4
然后可以得到矩阵
[ 1 1 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 2 1 1 ] \begin{bmatrix}1 & 1 & 0 & 0 & 0\\ 1 & 0 & 0 & 0 & 0\\ 0 & 1 & 1 & 0 & 0\\ 0 & 0 & 1 & 1 & 0\\ 0 & 0 & 2 & 1 & 1\end{bmatrix} 1100010100001120001100001
然后快速幂即可
但出题人的方法在计算 f 3 f_3 f3时会减去1??
但问题不大,预处理一下即可

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define wyc 1000000007 
using namespace std;
ll n;
struct matrix
{ll n, m, a[10][10];matrix operator *(const matrix &b) const{matrix c;c.n = n;c.m = b.m;for (int i = 1; i <= c.n; ++i)for (int j = 1; j <= c.m; ++j)c.a[i][j] = 0;for (int i = 1; i <= c.n; ++i)for (int k = 1; k <= m; ++k)for (int j = 1; j <= c.m; ++j)c.a[i][j] = (c.a[i][j] + a[i][k] * b.a[k][j] % wyc) % wyc;return c;}
}A, B;
void Counting(ll x)
{while(x){if (x&1) A = A * B;B = B * B;x>>=1;}
}
int main()
{scanf("%lld", &n);if (n <= 3){if (n == 1) putchar('1');else if (n == 2) putchar('2');else if (n == 3) putchar('8');return 0;}A.n = 1;A.m = B.n = B.m = 5;A.a[1][1] = 0, A.a[1][2] = 6, A.a[1][3] = 12, A.a[1][4] = 4, A.a[1][5] = 1;//初始状态,前两个不算进去B.a[1][1] = 1, B.a[1][2] = 1, B.a[1][3] = 0, B.a[1][4] = 0, B.a[1][5] = 0;B.a[2][1] = 1, B.a[2][2] = 0, B.a[2][3] = 0, B.a[2][4] = 0, B.a[2][5] = 0;B.a[3][1] = 0, B.a[3][2] = 1, B.a[3][3] = 1, B.a[3][4] = 0, B.a[3][5] = 0;B.a[4][1] = 0, B.a[4][2] = 0, B.a[4][3] = 1, B.a[4][4] = 1, B.a[4][5] = 0;B.a[5][1] = 0, B.a[5][2] = 0, B.a[5][3] = 2, B.a[5][4] = 1, B.a[5][5] = 1;Counting(n - 2);//初始是s_2printf("%lld", A.a[1][1] + 2);//把前两个加进去return 0;
}

这篇关于【矩阵乘法】幼儿园数学题II(ssl 2514)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/658541

相关文章

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

Android逆向(反调,脱壳,过ssl证书脚本)

文章目录 总结 基础Android基础工具 定位关键代码页面activity定位数据包参数定位堆栈追踪 编写反调脱壳好用的脚本过ssl证书校验抓包反调的脚本打印堆栈bilibili反调的脚本 总结 暑假做了两个月的Android逆向,记录一下自己学到的东西。对于app渗透有了一些思路。 这两个月主要做的是代码分析,对于分析完后的持久化等没有学习。主要是如何反编译源码,如何找到

LeetCode:3177. 求出最长好子序列 II 哈希表+动态规划实现n*k时间复杂度

3177. 求出最长好子序列 II 题目链接 题目描述 给你一个整数数组 nums 和一个非负整数k 。如果一个整数序列 seq 满足在下标范围 [0, seq.length - 2] 中 最多只有 k 个下标i满足 seq[i] != seq[i + 1] ,那么我们称这个整数序列为好序列。请你返回 nums中好子序列的最长长度。 实例1: 输入:nums = [1,2,1,1,3],

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

线性代数|机器学习-P35距离矩阵和普鲁克问题

文章目录 1. 距离矩阵2. 正交普鲁克问题3. 实例说明 1. 距离矩阵 假设有三个点 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​,三个点距离如下: ∣ ∣ x 1 − x 2 ∣ ∣ 2 = 1 , ∣ ∣ x 2 − x 3 ∣ ∣ 2 = 1 , ∣ ∣ x 1 − x 3 ∣ ∣ 2 = 6 \begin{equation} ||x