题目描述

啦啦啦,Starry正愉快的做着编程题,代码是多么优美呀!突然,有人问他一道数学题,对于数学渣渣的Starry来说,这是多么的烦恼呀。不过不要紧,他还可以问其他人的,所以他想到了聪明的你们。这个问题是由一个神奇的魔法师提出的,他创造了一种魔法,每次使用魔法可以让今天的魔力值为前一天魔力值的2018倍+前两天魔力值的8倍+前三天魔力值的12倍。当然,一天只能使用一次魔法,除了使用魔法外,每天魔法师还能产生8888的魔力值。第一、二、三天的初始魔力值为888。他想问的是第n天他可以拥有多少魔力值。

输入

第一行输入一个T表示有TT个问题(1≤T≤104)(1≤T≤104)。

接下来T行,每行有一个数n(1≤n≤1018)n(1≤n≤1018),表示第nn天。

输出

输出TT行,每行输出第nn天的魔力值,由于数很大,结果对2018081220180812取模。

样例输入

3
2
5
8

样例输出

888
17299052
16854116

解题思路:数据太大,不能打表不能暴力,就用矩阵快速幂。矩阵1:{888,888,888,8888},矩阵二:{{2018,1,0,0},{8,0,1,0},{12,0,0,0},{1,0,0,1}};矩阵1的意义:{f1,f2,f3,c},fn为第几的天数,c为常量。推导见基础矩阵快速幂的斐波那契数列;参考博客:https://www.cnblogs.com/cmmdc/p/6936196.html以下为ac代码:
 1 #include<iostream>
 2 using namespace std;
 3 const int mod=20180812;
 4 struct P{
 5     long long a[4][4];
 6 }num,rex;
 7 long long f[4];
 8 void init()
 9 {
10     f[0]=f[1]=f[2]=888;f[3]=8888;
11     num.a[0][0]=2018;num.a[0][1]=1;num.a[0][2]=0;num.a[0][3]=0;
12     num.a[1][0]=8;num.a[1][1]=0;num.a[1][2]=1;num.a[1][3]=0;
13     num.a[2][0]=12;num.a[2][1]=0;num.a[2][2]=0;num.a[2][3]=0;
14     num.a[3][0]=1;num.a[3][1]=0;num.a[3][2]=0;num.a[3][3]=1;
15     return;
16 }
17 P fun(P x,P y)
18 {
19     P tmp;
20     for(int i=0;i<4;i++)
21     for(int j=0;j<4;j++)
22         tmp.a[i][j]=0;
23     for(int i=0;i<4;i++)
24     for(int j=0;j<4;j++)
25     for(int k=0;k<4;k++)
26         tmp.a[i][j]=(tmp.a[i][j]+(x.a[i][k]*y.a[k][j])%mod)%mod;
27     return tmp;
28 }
29 void quickp(long long n)
30 {
31     for(int i=0;i<4;i++)
32     for(int j=0;j<4;j++)
33     {
34         if(i==j) rex.a[i][j]=1;
35         else rex.a[i][j]=0;
36     }
37     while(n)
38     {
39         if(n&1)
40             rex=fun(rex,num);
41         num=fun(num,num);
42         n>>=1;
43     }
44     return;
45 }
46 int main()
47 {
48     long long t,n;
49     scanf("%lld",&t);
50     while(t--)
51     {
52         long long ans=0;
53         init();
54         scanf("%lld",&n);
55         if(n<=3)
56         cout<<"888"<<endl;
57         else
58         {
59             quickp(n-3);
60             for(int i=0;i<4;i++)
61                 ans=(ans+(f[i]*rex.a[i][0])%mod)%mod;
62             printf("%lld\n",ans);
63         }
64     }
65     return 0;
66 }

转载于:https://www.cnblogs.com/wwq-19990526/p/9467548.html

Starry的神奇魔法 矩阵快速幂相关推荐

  1. D.Starry的神奇魔法(矩阵快速幂)

    /*D: Starry的神奇魔法 Time Limit: 1 s      Memory Limit: 128 MB Submit My Status Problem Description     ...

  2. D: Starry的神奇魔法(矩阵快速幂)

    题目链接:https://oj.ismdeep.com/contest/Problem?id=1284&pid=3 D: Starry的神奇魔法 Time Limit: 1 s      Me ...

  3. 矩阵快速幂 学习笔记

    据说,矩阵快速幂在递推式优化上相当神奇,而且效率很高... 两矩阵相乘,朴素算法的复杂度是O(N^3).如果求一次矩阵的M次幂,按朴素的写法就是O(N^3*M).既然是求幂,不免想到快速幂取模的算法, ...

  4. 2021-2022年度第三届全国大学生算法设计与编程挑战赛(秋季赛)- 分组(矩阵快速幂套NTT优化dp)

    题目链接:点击查看 题目大意:给出 nnn 个连续的小球,每次可以选择单独的一个或者相邻的两个小球分成一组,允许有剩余的小球,问恰好分成 k∈{1,2,3,⋯,m}k\in\{1,2,3,\cdots ...

  5. [选拔赛1]花园(矩阵快速幂),JM的月亮神树(最短路),保护出题人(斜率优化)

    多年不考试,一夜回到解放前 T1:花园 title solution code T2:月亮神树 title solution code T3:保护出题人 title solution code T1: ...

  6. [BZOJ3583]杰杰的女性朋友(矩阵快速幂)

    杰杰的女性朋友 时间限制:10s      空间限制:256MB 题目描述 杰杰是魔法界的一名传奇人物.他对魔法具有深刻的洞察力,惊人的领悟力,以及令人叹为观止的创造力.自从他从事魔法竞赛以来,短短几 ...

  7. 快速幂或者矩阵快速幂

    快速幂或者矩阵快速幂在算大指数次方时是很高效的,他的基本原理是二进制,下面的A可以是一个数也可以是一个矩阵(本文特指方阵),若是数就是快速幂算法,若是矩阵就是矩阵快速幂算法,用c++只需把矩阵设成一个 ...

  8. 数字迷阵(矩阵快速幂+结论题)

    数字迷阵(矩阵快速幂+结论题) 题目描述 小可可参观科学博物馆时,看到一件藏品,上面有密密麻麻的数字,如下所示:    1   2   3   5    8    13   21   34   55 ...

  9. 矩阵快速幂+构造方法

    与快速幂一样,可以将递推式通过二进制的方式来进行优化,这个学了快速幂就是十分容易理解 大概的板子如下: struct mat///自己定义大小的矩阵 {ll m[11][11]; }; mat mul ...

最新文章

  1. 防护很重要!教你教你认识和检验安防产品的IP防护等级
  2. java jdbc 链接pg_Java零基础教程
  3. 区分 JVM 内存结构、 Java 内存模型 以及 Java 对象模型 三个概念
  4. 再品Resnet残差网络
  5. JZOJ.5274【NOIP2017模拟8.14】数组
  6. 原生javaScript中使用Ajax实现异步通信
  7. 在Linux下使用dnw和u-boot烧写系统
  8. linux 后台进程管理,Linux 后台进程管理利器 Supervisor
  9. Java奖学金评定系统设计与实现
  10. 最短路径问题---SPEA算法详解
  11. 【数据库原理】关系-Relationship
  12. M1版MacBookAir使用情况(供购买参考)
  13. 用计算机算加法与乘法应该怎么算,你知道计算机是怎么计算加减乘除算式的么?...
  14. 这一周 火火火 的 GitHub 项目
  15. 澳大利亚:千万别惹这几种蛇,它们可是人类的噩梦
  16. System.DllNotFoundException: Unable to load DLL 'XX.dll': 找不到指定的模块。 (Exception from HRESULT:
  17. 2023年3月华为认证HCIP新增题库(考试编号H12-821)
  18. 行内元素、块元素、行内块元素的区别
  19. VMWare 下完美安装 Mac OS X
  20. 【PHP】实现验证码图片

热门文章

  1. [附源码]计算机毕业设计Node.js张家界旅游景点网站论文(程序+LW)
  2. 移动端微信接收到CAD图纸,如何打开?
  3. 初探区块链的挑战,应用和发展
  4. 二元函数的连续、可偏导、可微、偏导数连续之间的关系
  5. SpringBoot 整合实现ActiveMQ
  6. 华为面试题错题集总结,你的Java基础过关了吗?
  7. 突发,韩国三星发生重大变化!
  8. shopee售后退款与退货规定
  9. 阿里CEO张勇认为程序员不应限制年龄
  10. C语言 java 解一元二次方程