lightoj1132—Summing up Powers (取膜技巧&&组合数应用)
题目链接:https://vjudge.net/problem/LightOJ-1132
题目意思:(1K + 2K + 3K + ... + NK) % 232
矩阵快速幂的题目一般都很短,这道题也一样就是这么简单。
思路:运用到了组合数a^k=C(k,0)*a^k+C(k,1)*a^(k-1)+C(k,2)*a^(k-2)+C(k,3)*a^(k-3)+C(k,4)*a^(k-4)+……C(k,k)*a^(k-k),运用这个式子我们可以构造以下矩阵。
C(k,), C(k,), C(k,), C(k,)………… …… C(k,k) (n-)^k (n)^k
C(k-,), C(k-,), C(k-,), C(k-,)…………C(k-,k-) (n-)^(k-) (n)^(k-)
C(k-,), C(k-,), C(k-,), C(k-,)…………C(k-,k-) (n-)^(k-) (n)^(k-)
C(k-,), C(k-,), C(k-,), C(k-,)…………C(k-,k-) (n-)^(k-) = (n)^(k-)
…………………… * 0
……………………
……………………
C(,), C(,), C(,), C(,) (n-)^() (n)^()
C(,), C(,), C(,) (n-)^() (n)^()
C(,), C(,) (n-)^() (n)^()
C(k,), C(k,), C(k,), C(k,)………… …… C(k,k) s(n-) s[n]
还有一点这道题有一个奇怪的mod数2^32对于这个膜数我们采用unsigned int自然溢出就好了,如果直接mod就会超时,这一点在以后遇到这个mod数的时候需要注意。
代码:
//Author: xiaowuga
#include<bits/c++.h>
#define maxx INT_MAX
#define minn INT_MIN
#define inf 0x3f3f3f3f using namespace std;
typedef unsigned int ll;
long long n,size;
struct Matrix{
ll mat[][];
void clear(){
memset(mat,,sizeof(mat));
}
Matrix operator * (const Matrix & m) const{
Matrix tmp;
int i ,j,k;
tmp.clear();
for( i=;i<=size+;i++)
for( k=;k<=size+;k++){
if(mat[i][k]==) continue;
for( j=;j<=size+;j++){
tmp.mat[i][j]+=mat[i][k]*m.mat[k][j];
//tmp.mat[i][j]%=MOD;
}
}
return tmp;
}
};
Matrix POW(Matrix m,long long k){
Matrix ans;
memset(ans.mat,,sizeof(ans.mat));
for(int i=;i<=size+;i++) ans.mat[i][i]=;
while(k){
if(k&) ans=ans*m;
k=k>>;
m=m*m;
}
return ans;
}
int main() {
ll tranangle[][]={};
tranangle[][]=;
for(int i=;i<;i++){
tranangle[i][]=;
for(int j=;j<=i;j++)
tranangle[i][j]=tranangle[i-][j]+tranangle[i-][j-];
}
int T;
scanf("%d",&T);
for(int Case=;Case<=T;Case++){
scanf("%lld%lld",&n,&size);
Matrix m;
memset(m.mat,,sizeof(m.mat));
for(int i=;i<=size;i++){
for(int j=;j<=size;j++)
m.mat[i][j]=tranangle[i][j];
}
for(int i=;i<=size;i++)
m.mat[size+][i]=tranangle[size][i];
m.mat[size+][size+]=;
Matrix ans=POW(m,n-);
ll sum=;
for(int i=;i<=size+;i++){
sum+=ans.mat[size+][i];
}
printf("Case %d: %lld\n",Case,sum);
}
return ;
}
lightoj1132—Summing up Powers (取膜技巧&&组合数应用)的更多相关文章
- NOIp 2014 解方程 【数学/秦九韶算法/大数取膜】By cellur925
题目传送门 题意:求高次方程的解及其个数.其中 1° 我们知道,高次方程是没有求根公式的.但是利用逆向思维,我们可以进行“试根法”,因为题目中给出了所求根的范围.但是多项式系数过于吓人,达到了sxbk ...
- 1142 - Summing up Powers (II)
1142 - Summing up Powers (II) PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit ...
- ACM-ICPC 2018 焦作赛区网络预赛G Give Candies(隔板定理 + 小费马定理 + 大数取模,组合数求和)题解
题意:给你n个东西,叫你把n分成任意段,这样的分法有几种(例如3:1 1 1,1 2,2 1,3 :所以3共有4种),n最多有1e5位,答案取模p = 1e9+7 思路:就是往n个东西中间插任意个板子 ...
- sgu 146. The Runner 取模技巧 难度:1
146. The Runner time limit per test: 0.25 sec.memory limit per test: 4096 KB input: standard inputou ...
- lightOJ 1132 Summing up Powers(矩阵 二分)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1132 题意:给出n和m.求sum(i^m)%2^32.(1<=i<=n) ...
- 【BZOJ】3751: [NOIP2014]解方程【秦九韶公式】【大整数取模技巧】
3751: [NOIP2014]解方程 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 4856 Solved: 983[Submit][Status ...
- ACM-较大的数乘法取模技巧*
比如模数是1e15这种,相乘的时候爆LL了,但是又不想用大数,咋办呢? long long ksc(long long a, long long b, long long mod){ ; while( ...
- LightOJ 1132 Summing up Powers:矩阵快速幂 + 二项式定理
题目链接:http://lightoj.com/volume_showproblem.php?problem=1132 题意: 给定n.k,求(1K + 2K + 3K + ... + NK) % 2 ...
- LightOJ - 1132 Summing up Powers 矩阵高速幂
题目大意:求(1^K + 2^K + 3K + - + N^K) % 2^32 解题思路: 借用别人的图 能够先打表,求出Cnm,用杨辉三角能够高速得到 #include<cstdio> ...
随机推荐
- [elk]logstash统计api访问失败率
处理原始日志 日志从moogoo导出来的 { "mobile" : "13612345678", "isp" : "中国移动_广东 ...
- Decoration4:分页展示
现在我们实现前台List的分页展示,这也是最基本的要求 先看现在的Rest数据格式,在spring的默认返回中,分页用到的元素都已经在page节点中返回了,只要在前台合理利用就足够了 { " ...
- (oneway void) release中oneway的意思
oneway is used with the distributed objects API, which allows use of objective-c objects between dif ...
- HDU 2844 Coin 多重背包
Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- Python删除列表中元素
Python中列表(list)是很常用的数据结构,删除列表中的元素有几种方法 列表的remove方法 lst = [1, 1, 3, 4] lst.remove(1) # lst->[1, 3, ...
- 0070 过滤器调用Spring的bean操作数据库
假设有这样的需求:将用户每次请求的ip.时间.请求.user-agent存入数据库,很明显可以用过滤器实现,在过滤器中获取到这些数据调用mybatis的mapper存入数据库,但问题来了:mybati ...
- 解决VisualStudio2013无法查看数组内容的问题
症状: 在使用VS2013调试的时候,数组只能查看第一个元素的值.如图 解决方案: 调试>窗口>内存 输入数组的内存地址,右击内存窗口>带符号显示(也可以选择16进制显示,看你自己的 ...
- 在eclipse上Checkstyle的安装和使用
1. 概述 随着中心的代码规范的建立和实施,项目组对代码规范要求,以及软件工程师们对自身代码的编写规范重要性的认知,“代码规范”已经成为了中心的一个“热词”.然后怎么才能写出有规范的代码,怎么才能养成 ...
- C++-教程1-VS2010环境设置
一.需要下载的软件 1.visual studio 2010\\xxzx\tools\编程工具\MICROSOFT\VISUAL.STUDIO\VISUAL.STUDIO.201032位cn_visu ...
- Oracle复习(有记录才能沉淀.......)
一.Oracle准备工作 1.安装Oracle Oracle数据库产品是免费的,我们可以从Oracle的官方网站(http://www.oracle.com)下载到程序安装包,Oracle在Windo ...