博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 3483 A Very Simple Problem 矩阵构造
阅读量:4932 次
发布时间:2019-06-11

本文共 1735 字,大约阅读时间需要 5 分钟。

利用二项式定理,可以可以将x^k*k^x展开得x^(k-1)*(1+k-1)^x从而得到递推关系,构造出矩阵直接快速幂就好了。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std; #define MP make_pair#define PB push_backtypedef long long LL;typedef unsigned long long ULL;typedef vector
VI;typedef pair
PII;typedef pair
PDD;const int INF = INT_MAX / 3;const double eps = 1e-8;const LL LINF = 1e17;const double DINF = 1e60;const int maxn = 65;int N, M, x;struct Matrix { int n, m; LL data[maxn][maxn]; Matrix(int n = 0, int m = 0): n(n), m(m) { memset(data, 0, sizeof(data)); } void print() { for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { cout << data[i][j] << " "; } cout << endl; } }};Matrix operator * (Matrix a, Matrix b) { Matrix ret(a.n, b.m); for(int i = 1; i <= a.n; i++) { for(int j = 1; j <= b.m; j++) { for(int k = 1; k <= a.m; k++) { ret.data[i][j] += a.data[i][k] * b.data[k][j]; ret.data[i][j] %= M; } } } return ret;}Matrix pow(Matrix val, LL p) { Matrix ret(val.n, val.m); for(int i = 1; i <= val.n; i++) ret.data[i][i] = 1; while(p) { if(p & 1) ret = ret * val; val = val * val; p >>= 1; } return ret;}int main() { while(cin >> N >> x >> M) { if(N < 0) break; Matrix A0(x + 2, 1), A(x + 2, x + 2); for(int i = 1; i <= x + 1; i++) A0.data[i][1] = x; A.data[x + 1][1] = 0; A.data[1][1] = x; for(int i = 2; i <= x + 1; i++) { for(int j = 1; j <= i; j++) { A.data[i][j] = (A.data[i - 1][j] + A.data[i - 1][j - 1]) % M; } } A.data[x + 2][x + 1] = A.data[x + 2][x + 2] = 1; A0 = pow(A, N) * A0; cout << A0.data[x + 2][1] << endl; } return 0;}

  

转载于:https://www.cnblogs.com/rolight/p/4056050.html

你可能感兴趣的文章
PHP实用小程序(六)
查看>>
PDFsharp Samples
查看>>
django-cms 代码研究(八)app hooks
查看>>
peewee Model.get的复杂查询
查看>>
IE浏览器兼容性设置的一些问题
查看>>
SQL Server复制入门(二)----复制的几种模式
查看>>
javascript 简单认识
查看>>
tomcat 系统架构与设计模式 第二部分 设计模式 转
查看>>
scanf中的%[^\n]%*c格式
查看>>
启动Eclipse报Initializing Java Tooling错误解决方法
查看>>
用jquery来实现类似“网易新闻”横向标题滑动的移动端页面
查看>>
(原)基于物品的协同过滤ItemCF的mapreduce实现
查看>>
CSS可以和不可以继承的属性
查看>>
eclipse每次当我按ctrl+鼠标点击代码,自动关闭,产生原因及解决办法!!
查看>>
hbase
查看>>
用PHP将Unicode 转化为UTF-8
查看>>
HDOJ1002 A+B Problem II
查看>>
ADB server didn't ACK(adb不能开启
查看>>
网页内容抓取
查看>>
分布式和集群的区别
查看>>