题目链接: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 (取膜技巧&&组合数应用)的更多相关文章

  1. NOIp 2014 解方程 【数学/秦九韶算法/大数取膜】By cellur925

    题目传送门 题意:求高次方程的解及其个数.其中 1° 我们知道,高次方程是没有求根公式的.但是利用逆向思维,我们可以进行“试根法”,因为题目中给出了所求根的范围.但是多项式系数过于吓人,达到了sxbk ...

  2. 1142 - Summing up Powers (II)

    1142 - Summing up Powers (II)    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit ...

  3. 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个东西中间插任意个板子 ...

  4. sgu 146. The Runner 取模技巧 难度:1

    146. The Runner time limit per test: 0.25 sec.memory limit per test: 4096 KB input: standard inputou ...

  5. lightOJ 1132 Summing up Powers(矩阵 二分)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1132 题意:给出n和m.求sum(i^m)%2^32.(1<=i<=n) ...

  6. 【BZOJ】3751: [NOIP2014]解方程【秦九韶公式】【大整数取模技巧】

    3751: [NOIP2014]解方程 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 4856  Solved: 983[Submit][Status ...

  7. ACM-较大的数乘法取模技巧*

    比如模数是1e15这种,相乘的时候爆LL了,但是又不想用大数,咋办呢? long long ksc(long long a, long long b, long long mod){ ; while( ...

  8. LightOJ 1132 Summing up Powers:矩阵快速幂 + 二项式定理

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1132 题意: 给定n.k,求(1K + 2K + 3K + ... + NK) % 2 ...

  9. LightOJ - 1132 Summing up Powers 矩阵高速幂

    题目大意:求(1^K + 2^K + 3K + - + N^K) % 2^32 解题思路: 借用别人的图 能够先打表,求出Cnm,用杨辉三角能够高速得到 #include<cstdio> ...

随机推荐

  1. Decoration5:引入Actuator进行站点监控

    1.添加依赖 2.重启应用 3.下图显示了一些默认的监控端点 这是数据可以在前台用来做饼图和柱状图什么的,不过实际上我们现在还用不到,于是就不深入研究

  2. How to create PDF files in a Python/Django application using ReportLab

    https://assist-software.net/blog/how-create-pdf-files-python-django-application-using-reportlab CONT ...

  3. vue中config/index.js:配置的详细理解

    当我们需要和后台分离部署的时候,必须配置config/index.js: 用vue-cli 自动构建的目录里面  (环境变量及其基本变量的配置) var path = require('path') ...

  4. echarts报表

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  5. 浅析StackTrace

    我们在学习函数调用时,都知道每个函数都拥有自己的栈空间.一个函数被调用时,就创建一个新的栈空间.那么通过函数的嵌套调用最后就形成了一个函数调用堆栈.在c#中,使用StackTrace记录这个堆栈.你可 ...

  6. Tomcat Ajax跨域访问

    http://ibleave60.blog.51cto.com/2669415/1208652 http://enable-cors.org/server.html 下载cors-filter-1.7 ...

  7. C++中变量做数组长度

    在Java中,这是完全可以的,比如我们运行如下程序: package cn.darrenchan.storm; import java.util.Arrays; public class Test { ...

  8. Android基础总结(九)多媒体

    多媒体概念(了解) 文字.图片.音频.视频 计算机图片大小的计算(掌握) 图片大小 = 图片的总像素 * 每个像素占用的大小 单色图:每个像素占用1/8个字节 16色图:每个像素占用1/2个字节 25 ...

  9. linux查看端口命令和kill

    1.查看  netstat -atunlp 2kill:kill -9 PID

  10. 特征根法求通项+广义Fibonacci数列找循环节 - HDU 5451 Best Solver

    Best Solver Problem's Link Mean: 给出x和M,求:(5+2√6)^(1+2x)的值.x<2^32,M<=46337. analyse: 这题需要用到高中的数 ...