题目连接

很久没写矩阵加速了,复习一下,没想到是一道小毒瘤题。

状态矩阵\(a[k],b[k],c[k],a[k+1],b[k+1],c[k+1],k,k^2,w^k,z^k,1\)

转移矩阵

  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, q, 0, 0, p, 1, 1, t, r, 0, 0, 1,
0, 0, v, 0, 1, u, 1, 0, 0, 1, 0, 0,
0, 0, 0, y, 1, 1, x, 1, 0, 0, 1, 2,
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, z, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1

手写不易。

#include <cstdio>
#include <cstdlib>
#include <cstring>
// a[k],b[k],c[k],a[k+1],b[k+1],c[k+1],k,k^2,w^k,z^k,1
int u, v, p, q, r, t, x, w, z, y;
typedef long long ll;
ll n, k;
ll f[12], tmp[12], temp[12][12], dp[12][12];
inline ll Slow_Mul(ll a, ll b){
ll ans = 0;
while(b){
if(b & 1) ans = (ans + a) % k;
b >>= 1;
a = (a + a) % k;
}
return ans;
}
inline void Mult(){
for(int i = 1; i <= 11; ++i){
tmp[i] = 0;
for(int j = 1; j <= 11; ++j)
(tmp[i] += Slow_Mul(f[j], dp[i][j])) %= k;
}
for(int i = 1; i <= 11; ++i)
f[i] = tmp[i];
}
inline void Self(){
for(int i = 1; i <= 11; ++i)
for(int j = 1; j <= 11; ++j){
temp[i][j] = 0;
for(int l = 1; l <= 11; ++l)
(temp[i][j] += Slow_Mul(dp[i][l], dp[l][j])) %= k;
}
for(int i = 1; i <= 11; ++i)
for(int j = 1; j <= 11; ++j)
dp[i][j] = temp[i][j];
}
inline void Fast_Pow(){
n -= 2;
while(n){
if(n & 1) Mult();
n >>= 1;
Self();
}
}
int main(){
scanf("%lld%lld%d%d%d%d%d%d%d%d%d%d", &n, &k, &p, &q, &r, &t, &u, &v, &w, &x, &y, &z);
ll xs[12][12] =
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, q, 0, 0, p, 1, 1, t, r, 0, 0, 1,
0, 0, v, 0, 1, u, 1, 0, 0, 1, 0, 0,
0, 0, 0, y, 1, 1, x, 1, 0, 0, 1, 2,
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, z, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
};
memcpy(dp, xs, sizeof dp);
f[1] = f[2] = f[3] = f[11] = 1; f[4] = f[5] = f[6] = 3; f[9] = w; f[10] = z; f[7] = 1; f[8] = 1;
Fast_Pow();
printf("nodgd %lld\nCiocio %lld\nNicole %lld\n", f[4], f[5], f[6]);
return 0;
}

【洛谷 P1707】 刷题比赛 (矩阵加速)的更多相关文章

  1. [洛谷P1707] 刷题比赛

    洛谷题目连接:刷题比赛 题目背景 nodgd是一个喜欢写程序的同学,前不久洛谷OJ横空出世,nodgd同学当然第一时间来到洛谷OJ刷题.于是发生了一系列有趣的事情,他就打算用这些事情来出题恶心大家-- ...

  2. P1707 刷题比赛

    P1707 刷题比赛 10通过 38提交 题目提供者nodgd 标签倍增递推矩阵洛谷原创 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 不科学 题目背景 nodgd是一个喜欢写程序的同学, ...

  3. 洛谷 P1167 刷题

    洛谷 P1167 刷题 洛谷传送门 题目描述 noip临近了,小A却发现他已经不会写题了.好在现在离竞赛还有一段时间,小A决定从现在开始夜以继日地刷题.也就是说小A废寝忘食,一天二十四小时地刷题. 今 ...

  4. [洛谷P1939]【模板】矩阵加速(数列)

    题目大意:给你一个数列a,规定$a[1]=a[2]=a[3]=1$,$a[i]=a[i-1]+a[i-3](i>3)$求$a[n]\ mod\ 10^9+7$的值. 解题思路:这题看似是很简单的 ...

  5. 洛谷 P1939 【模板】矩阵加速(数列) 解题报告

    P1939 [模板]矩阵加速(数列) 题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值 ...

  6. 洛谷P3216 [HNOI2011] 数学作业 [矩阵加速,数论]

    题目传送门 数学作业 题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N和 M,要求计算 Concatenate (1 .. N)Mod M 的值,其中 C ...

  7. [luogu1707] 刷题比赛 [矩阵快速幂]

    题面: 传送门 思路: 一眼看上去是三个递推......好像还挺麻烦的 仔细观察一下,发现也就是一个线性递推,但是其中后面的常数项比较麻烦 观察一下,这里面有以下三个递推是比较麻烦的 第一个是$k^2 ...

  8. 洛谷 P1939 【模板】矩阵加速(数列)

    题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值. 输入输出格式 输入格式: 第一行一 ...

  9. 洛谷P1939【模板】矩阵加速(数列)+矩阵快速幂

    思路: 这个 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 可以想成: [a(n) ] [1 0 1] [a(n-1)   ] [a(n-1) ] =    ...

  10. 洛谷P5274 优化题(ccj)

    洛谷P5274 优化题(ccj) 题目背景 CCJCCJ 在前往参加 Universe \ OIUniverse OI 的途中... 题目描述 有一个神犇 CCJCCJ,他在前往参加 Universe ...

随机推荐

  1. java.lang.ClassNotFoundException: com.google.gson.Gson 问题解决

    我是这么解决:把gson.jar放到WEB-INF/lib目录下. 放在其他目录就会报错.

  2. css那些事儿2 经典两列布局

    <!DOCTYPE html> <html> <head> <title></title> <link rel="style ...

  3. 利用Vue v-model实现一个自定义的表单组件

    原文请点此链接  http://blog.csdn.net/yangbingbinga/article/details/61915038

  4. vi/sed等遵循的搜索正则语法

    转自:http://blog.csdn.net/lanxinju/article/details/5731843 一.查找 查找命令 /pattern<Enter> :向下查找patter ...

  5. 使用gdb查看栈帧的情况, 没有ebp

    0x7fffffffdb58: 0x004005ba  0x00000000  0x00000000  0x00000000 <-----funcb的栈帧 [0x7fffffffdb60, 0x ...

  6. ASP.NET MVC4计划任务实现方法(定时执行某个功能)

    系统中定时执行某个任务是比较常用的功能,如一个部门定期向上级部门上报数据是一个典型的例子,下面就简单说说在.net mvc中如何实现定时执行某个功能的方法. 1.首先修改Glocal.asax文件,在 ...

  7. 使用Xcode进行调试

    目录 知己知彼 百战不殆抽刀断Bug 普通操作 全局断点(Global BreakPoint) 条件断点(Condational Breakpoints)打印的艺术 NSLog 开启僵尸对象(Enab ...

  8. 【bzoj1093】[ZJOI2007]最大半连通子图 Tarjan+拓扑排序+dp

    题目描述 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:对于u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向路径. ...

  9. 楼房 洛谷1382 && codevs2995

    P1382 楼房 题目描述 地平线(x轴)上有n个矩(lou)形(fang),用三个整数h[i],l[i],r[i]来表示第i个矩形:矩形左下角为(l[i],0),右上角为(r[i],h[i]).地平 ...

  10. CentOS 文件搜索find

    1.文件搜索,内置的的命令是find 用法: find [查找路径] 寻找条件 操作 默认路径为当前目录:默认表达式为 -print 2.主要参数: -name 匹配名称 -perm 匹配权限(mod ...