题目描述 输入 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 输出 一行一个整数代表答案. 样例输入 2 10007 2 0 样例输出 8 题目大意 问从nk个数中选出若干个,且选出数的数目mod k=r的方案数 题解 dp+快速幂/矩阵乘法 题目描述是骗人的,一个一个加根本不可能加的过来. 关于矩阵乘法的题解可以参考 popoqqq大爷的博客 ,时间复杂度为O(k^3logn),…
4870: [Shoi2017]组合数问题 Time Limit: 10 Sec  Memory Limit: 512 MB Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 Output 一行一个整数代表答案. Sample Input 2 10007 2 0 Sample Output 8   题解: 今年的省选题…… 题目的要求很简单,就是求满足…
题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数) 题目描述 请你求出 f(n) mod 1000000007 的值. 输入输出格式 输入格式: ·第 1 行:一个整数 n 输出格式: 第 1 行: f(n) mod 1000000007 的值 输入输出样例 输入样例#1: 5 输出样例#1: 5 输入样例#2: 10 输出样例#2: 55 说明 对于 60%…
[BZOJ4870]组合数问题(动态规划,矩阵快速幂) 题面 BZOJ 洛谷 题解 显然直接算是没法做的.但是要求的东西的和就是从\(nk\)个物品中选出模\(k\)意义下恰好\(r\)个物品的方案数.\(n\)的范围这么大,往快速幂的方面靠.设\(f[i][j]\)表示从前\(i\)个物品中选了模\(k\)意义下\(j\)个物品的方案数,转移显然,快速幂即可. 时间复杂度\(O(k^3logn)\). 稍微注意一个细节,\(k=1\)的时候,矩阵的唯一一项不是\(1\),而是\(2\).所以在…
矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d      C D   =   c*A+d*C  c*A+d*C 上代码 struct matrix { ll a[maxn][maxn]; }; matrix matrix_mul(matrix x,matrix y) { matrix temp; ;i<=n;i++) ;j<=n;j++) { tem…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2604 Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4428    Accepted Submission(s): 1961 Problem Description Queues and Priority Queues a…
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1005 Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 131753    Accepted Submission(s): 31988 Problem Description A number sequence…
目录 快速幂 实数快速幂 矩阵快速幂 快速幂 实数快速幂 普通求幂的方法为 O(n) .在一些要求比较严格的题目上很有可能会超时.所以下面来介绍一下快速幂. 快速幂的思想其实是将数分解,即a^b可以分解为(a^2)*(a^2)...a:然后再分别算a^2:这样的计算量由O(n)一下变成 \(O(logn)\): 模板代码如下: ll pow(int a,int b) { if(b==0) return 1; ll res=1 % mod; while(b) { if(b&1) res=res*a…
为了1A我居然写了个暴力对拍... 那个式子本质上是求nk个数里选j个数,且j%k==r的方案数. 所以把组合数的递推式写出来f[i][j]=f[i-1][j]+f[i-1][(j-1+k)%k]...我们知道求组合数实际上是可以矩阵乘法优化的,只是没必要,但是这个时候就用上了... 于是矩阵乘法优化,AC之~ #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #i…
题目分析: 构造f[nk][r]表示题目中要求的东西.容易发现递推公式f[nk][r]=f[nk-1][r]+f[nk-1][(r-1)%k].矩阵快速幂可以优化,时间复杂度O(k^3logn). 代码: #include<bits/stdc++.h> using namespace std; int n,p,k,r; ][]; ][]; ][]; void fast_pow(long long pw){ ) { ;i<k;i++) ;j<k;j++) g[i][j] = mat[…