lightoj1132—Summing up Powers (取膜技巧&&组合数应用)
2024-08-29 13:20:01
题目链接: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 ;
}
最新文章
- Xamarin. Android实现下拉刷新功能
- percona-toolkit中在线ddl
- 不安装Oracle客户端情况下使用PL/SQL 远程连接数据库
- asp.net+mysq 数据库操作类
- DEV控件Grid显示行号
- python socket 常见方法及 简单服务/客户端
- Mapreduce执行过程分析(基于Hadoop2.4)——(二)
- unity3d首次倒入工程文件出错Opening file Library/FailedAssetImports.txt failed解决方法
- java 通过网络 ntp 获取网络时间
- rbd块映射
- .net core 支付宝,微信支付 二
- 跟我一起读postgresql源码(七)——Executor(查询执行模块之——数据定义语句的执行)
- CentOS 7.3 minimal 开启网络服务
- 【经验随笔】 Tomcat多个APP使用相同名称环境变量导致问题
- capwap学习笔记——capwap的前世今生(转)
- 用Docker解决坑爹的环境搭建系列——ubuntu16.04 SSH
- 【CF809E】Surprise me! 树形DP 虚树 数学
- css布局 - 工作中常见的两栏布局案例及分析
- 决策树算法原理(ID3,C4.5)
- MySQL 5.7.19 忘记密码 重置密码 配置文件my.ini示例 服务启动后停止 log配置