HDU1757 A Simple Math Problem——————矩阵快速幂

HDU1757 - A Simple Math Problem - 矩阵快速幂 1.题目描述 A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4507    Accepted Submission(s): 2716 Problem Descripti 阅读详情

A Simple Math Problem

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6573    Accepted Submission(s): 4033


Problem Description
Lele now is thinking about a simple function f(x).

If x < 10 f(x) = x.
If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10);
And ai(0<=i<=9) can only be 0 or 1 .

Now, I will give a0 ~ a9 and two positive integers k and m ,and could you help Lele to caculate f(k)%m.
 

Input
The problem contains mutiple test cases.Please process to the end of file.
In each case, there will be two lines.
In the first line , there are two positive integers k and m. ( k<2*10^9 , m < 10^5 )
In the second line , there are ten integers represent a0 ~ a9.
 

Output
For each case, output f(k) % m in one line.
 

Sample Input
  
10 9999 1 1 1 1 1 1 1 1 1 1 20 500 1 0 1 0 1 0 1 0 1 0
 

Sample Output
  
45 104
 

Author
linle
 

Source
 

Recommend
lcy   |   We have carefully selected several similar problems for you:   1575  1588  3117  2276  2256 
 

Statistic |  Submit |  Discuss | Note

矩阵快速幂解决
第一步,构造矩阵:
( a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 ) × ( f x − 1 f x − 2 f x − 3 f x − 4 f x − 5 f x − 6 f x − 7 f x − 8 f x − 9 f x − 10 ) = ( f x f x − 1 f x − 2 f x − 3 f x − 4 f x − 5 f x − 6 f x − 7 f x − 8 f x − 9 ) \begin{pmatrix} a_0 &amp; a_1 &amp; a_2 &amp; a_3 &amp; a_4&amp; a_5 &amp; a_6&amp; a_7 &amp; a_8&amp;a_9\\ 1&amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 \\ 0 &amp;1 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 \\ 0&amp;0 &amp;1 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 \\ 0&amp;0 &amp;0 &amp;1 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 \\ 0&amp;0 &amp;0 &amp;0 &amp;1 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 \\ 0&amp;0 &amp;0 &amp;0 &amp;0 &amp;1 &amp;0 &amp;0 &amp;0 &amp;0 \\ 0&amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;1 &amp;0 &amp;0 &amp;0 \\ 0&amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;1 &amp;0 &amp;0 \\ 0&amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;1 &amp;0 \\ \end{pmatrix}\times \begin{pmatrix}f_{x-1}\\f_{x-2}\\f_{x-3}\\f_{x-4}\\f_{x-5}\\f_{x-6}\\f_{x-7}\\f_{x-8}\\f_{x-9}\\f_{x-10}\end{pmatrix} =\begin{pmatrix}f_{x}\\ f_{x-1}\\f_{x-2}\\f_{x-3}\\f_{x-4}\\f_{x-5}\\f_{x-6}\\f_{x-7}\\f_{x-8}\\f_{x-9}\end{pmatrix} ⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛​a0​100000000​a1​010000000​a2​001000000​a3​000100000​a4​000010000​a5​000001000​a6​000000100​a7​000000010​a8​000000001​a9​000000000​⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞​×⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛​fx−1​fx−2​fx−3​fx−4​fx−5​fx−6​fx−7​fx−8​fx−9​fx−10​​⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞​=⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛​fx​fx−1​fx−2​fx−3​fx−4​fx−5​fx−6​fx−7​fx−8​fx−9​​⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞​
然后利用矩阵快速幂求得:
( a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 ) n − 9 × ( f 9 f 8 f 7 f 6 f 5 f 4 f 3 f 2 f 1 f 0 ) = ( f n f n − 1 f n − 2 f n − 3 f n − 4 f n − 5 f n − 6 f n − 7 f n − 8 f n − 9 ) \begin{pmatrix} a_0 &amp; a_1 &amp; a_2 &amp; a_3 &amp; a_4&amp; a_5 &amp; a_6&amp; a_7 &amp; a_8&amp;a_9\\ 1&amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 \\ 0 &amp;1 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 \\ 0&amp;0 &amp;1 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 \\ 0&amp;0 &amp;0 &amp;1 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 \\ 0&amp;0 &amp;0 &amp;0 &amp;1 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 \\ 0&amp;0 &amp;0 &amp;0 &amp;0 &amp;1 &amp;0 &amp;0 &amp;0 &amp;0 \\ 0&amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;1 &amp;0 &amp;0 &amp;0 \\ 0&amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;1 &amp;0 &amp;0 \\ 0&amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;0 &amp;1 &amp;0 \\ \end{pmatrix}^{n-9}\times \begin{pmatrix}f_{9}\\f_{8}\\f_{7}\\f_{6}\\f_{5}\\f_{4}\\f_{3}\\f_{2}\\f_{1}\\f_{0}\end{pmatrix} =\begin{pmatrix}f_{n}\\ f_{n-1}\\f_{n-2}\\f_{n-3}\\f_{n-4}\\f_{n-5}\\f_{n-6}\\f_{n-7}\\f_{n-8}\\f_{n-9}\end{pmatrix} ⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛​a0​100000000​a1​010000000​a2​001000000​a3​000100000​a4​000010000​a5​000001000​a6​000000100​a7​000000010​a8​000000001​a9​000000000​⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞​n−9×⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛​f9​f8​f7​f6​f5​f4​f3​f2​f1​f0​​⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞​=⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛​fn​fn−1​fn−2​fn−3​fn−4​fn−5​fn−6​fn−7​fn−8​fn−9​​⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞​


代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN =  13;

struct mat{ll m[MAXN][MAXN]; };

ll n,MOD;
ll N,k,b_n=0;
ll C[MAXN],h[MAXN];

mat mul(mat a,mat b)//矩阵乘法
{
        mat tmp;
        for(int i=1;i<=N;i++)
                for(int j=1;j<=N;j++)
                {
                        tmp.m[i][j]=0;
                        for(int k=1;k<=N;k++)
                                tmp.m[i][j]=(tmp.m[i][j]+a.m[i][k]*b.m[k][j]+MOD)%MOD;
                }
        return tmp;
}
mat pow_mod(mat a,ll n)
{
        mat ans;
        for(int i=1;i<=N;i++)//构造单位矩阵
                for(int j=1;j<=N;j++)
                        ans.m[i][j]=(i==j);
        while(n)//矩阵快速幂
        {
                if(n&1) ans=mul(ans,a);
                a=mul(a,a);
                n>>=1;
        }
        return ans;
}

void init(mat &res,mat &H)//构造矩阵
{
        for(int i=1;i<=N;i++)
                res.m[1][i]=C[i];
        res.m[1][N]=b_n;
        for(int i=2;i<=N;i++)
                for(int j=1;j<=N;j++)
                        res.m[i][j]=(i==j+1);
        res.m[N][N-1] = 0;
        res.m[N][N]   = 1;
        for(int i=1;i<=N;i++)
        {
                H.m[i][1]=h[N-i];
                for(int j=2;j<=N;j++)
                        H.m[i][j]=0;
        }
        H.m[N][1]=1;
}
void slove(ll k,ll n)
{
        mat res,H;
        init(res,H);
        res = pow_mod(res,n-k+1);
        res = mul(res,H);
        ll ans=res.m[1][1];

        printf("%lld\n",ans%MOD);
}

int main()
{
        k=10; N=11;
        for(int i=1;i<=k;i++)   h[i]=i-1;

        while(~scanf("%lld %lld",&n,&MOD))//f(n)%MOD;,我更习惯这样写
        {

                for(int i=1;i<=k;i++)
                        scanf("%lld",&C[i]);//第一次没有加&,找了好久。。。我好傻
                if(n<10)
                {
                        printf("%d\n",n);
                        continue;
                }
                slove(k,n);
        }
        return 0;
}






SAP 财务快速记账之--科目分配模型(Account assignment model ) SAP FICO 运维解决方案 阅读详情

相关推荐

用Arduino和8个舵机,从零搭建一台能走路的并联腿机器狗(附完整代码与3D模型)

本文详细介绍了如何用Arduino和8个舵机从零搭建一台能走路的并联腿机器狗,包括硬件准备、结构组装、电路系统搭建、运动算法实现和Arduino编程。通过完整的代码与3D模型,帮助创客深入理解机器人运动原理,实现稳健行走的8自由度机器狗。

weixin_30482383的博客 702

HDU 1757 A Simple Math Problem(矩阵快速幂)

题目地址:HDU 1757 终于会构造矩阵了。其实也不难,只怪自己笨。。= =!  f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10) 构造的矩阵是:(我代码中构造的矩阵跟这个正好是上下颠倒过来了) |0 1 0 ......... 0|    |f0|   |f1 | |0 0 1 0 ...... 0|

scf0920 1007

最邻近点对问题(Closest-Pair Problem):二维的分治解法详解

低维时,最邻近点对问题可以利用分治求解。但是网络上相关资料良莠不齐,对于3维甚至难有有价值的参考。最近恰巧梳理了123维最邻近点对问题的相关知识,故在此分享。这是该系列的第二篇,介绍二维情况的分治解法。

Carl_Rabbit的博客 1万+

hdu1757 - A Simple Math Problem 矩阵快速幂

今天学矩阵突然开窍了总结一下就是,矩阵乘法是没有实际意义的 (这里的意思是,在现实中找不到对应的东西,这是一个纯数学方法) 而且把原本普通算数可以做的事情转变成矩阵乘法是多此一举 比如说把点(x,y)左右平移10个单位,非常简单地可以想到变换后的坐标是(x+10,y)或者(x-10,y)。那为什么要用一个矩阵去表示这种变换呢?因为矩阵乘法有结合律! 说点实际例子。 假设不使用矩阵乘法,那么平

做题的地方 695

深入瑞芯微SDK:手把手解析Uboot、Kernel到Rootfs的镜像生成与烧录

本文深入解析瑞芯微SDK中从Uboot、Kernel到Rootfs的镜像生成与烧录全流程,揭示编译背后的技术细节。通过详细分析SDK架构、镜像生成流水线、分区表定制、Rootfs构建及烧录科学,帮助开发者从会编译进阶到懂原理,掌握系统级开发的关键技术。

weixin_29193359的博客 273

CorelDRAW 2019安装指南:从下载到激活的完整步骤

本文提供了一份详细的CorelDRAW 2019安装指南,涵盖从下载安装包、检查系统环境到完成激活的完整步骤。文章重点解析了安装过程中的关键选项设置,并分享了首次启动后的优化配置与常见问题解决方案,旨在帮助用户高效、顺利地完成这款经典矢量设计软件的安装与配置。

weixin_29213827的博客 838

HDU1757 A Simple Math Problem【矩阵快速幂】

A Simple Math Problem http://acm.hdu.edu.cn/showproblem.php?pid=1757 Time Limit: 3000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7162Accepted Submiss...

逐梦者 279

STM32 ADC+DMA实战:手把手教你驱动XGZP6847A压力传感器(附完整代码)

本文详细介绍了如何使用STM32的ADC和DMA外设驱动XGZP6847A压力传感器,包括硬件连接、ADC配置、DMA高效传输实现以及数据处理与校准方法。通过实战案例和完整代码,帮助开发者快速掌握高精度压力数据采集技术,适用于工业控制和医疗设备等领域。

weixin_42570484的博客 404

HDU 1757 A Simple Math Problem (矩阵快速幂)

Time Limit: 3000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7240Accepted Submission(s): 4428 Problem Description Lele now is thinking about a simpl...

bravo的博客 3000

PTP(确时间协议,Precision Time Protocol)时间同步

主时钟定期发送带预估发送时间 t1 的报文(若支持硬件时间戳,实际 t1​ 由后续的Follow_Up报文携带)。所有设备启动后通过协商选举出唯一主时钟(Grandmaster),其余设备自动成为从时钟(Slave)。:从时钟记录接收时间 t2,随后向主时钟发送Delay_Req并记录发送时间 t3​。若使用支持PTP的交换机,可修正报文在交换机内的驻留时间,进一步提升精度。从时钟根据offset调整本地时钟,实现与主时钟同步。动态调整本地时钟,抵消传输延迟和时钟漂移。(或通过BMCA自动当选)。

努力努力努力 1304

基于Python的电商平台商品价格监控与历史价格查询系统

随着电子商务的快速发展,消费者对商品价格透明度的需求日益增长。本文设计并实现了一个基于Python的电商平台商品价格监控与历史价格查询系统,能够自动抓取京东和淘宝商品信息,存储历史价格数据,并通过可视化界面展示价格走势。系统采用最新的异步爬虫技术、反爬虫绕过策略和现代Web框架,实现了高效稳定的数据采集与展示功能。关键词:Python爬虫、价格监控、历史价格、数据可视化、异步爬虫、电商平台实现了京东和淘宝商品信息的异步爬取,采用多种反爬虫策略提高爬取成功率;

2201_76125261的博客 682

hdu 1757 A Simple Math Problem 矩阵快速幂

推出矩阵公式即可:(盗图) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1757 #include #include #include int len_Matrix; int Mod; struct Matrix{ int M[15][15]; }; int tempa[15]; int a[15]; void In

NM的专栏 473

ZYNQ PL通过EMIO ETHE1外接PHY由GMII转RGMII

1,设置EMIO方式引出ETHE1 2,从GMII过度到RGMII GMII: 发送 gmii_tx_clk gmii_tx_d[7:0] gmii_tx_en gmii_tx_er 接收 gmii_rx_clk gmii_rx_d[7:0] gmii_rx_dv gmii_rx_er RGMII: 发送 tx_clk tx_d[3:0] tx_ctrl 接收 rx_clk rx_d[3:0] rx_ctrl 首先数据总线从时钟单边沿采样8bit转变为了双边沿采样4bit,从88E1

wangjie36的博客 1万+

HDU1757 A Simple Math Problem (矩阵快速幂)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1757 题目描述:函数f(x)满足如下条件: x<10时,f(x)=x;x < 10时,f(x)=x;x<10时,f(x)=x; x>=10时,f(x)=a0∗f(x−1)+a1∗f(x−2)+...+a9∗f(x−10)x >= 10时, f(x)=a_0*f(x-1)+ a...

Tw_light的博客 231

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

hdu1757 A Simple Math Problem(矩阵快速幂)

题目: A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3522    Accepted Submission(s): 2130 Problem Description L

hexiecs的技术专栏 951

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[HDU 1757] A Simple Math Problem (矩阵快速幂)

矩阵快速幂 HDU 1757

SIOFive的专栏 1043

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

HDU 1757A Simple Math Problem(矩阵快速幂 简单题

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1757 题目描述: 题意: F(n)={F(n)=n,n&lt;10F(n)=∑i=09ai×F(x−i−1),n≥10 F(n)=\left\{ \begin{array}{rcl} F(n)=&amp;n, &amp;&amp;{n &lt; 10...

nuoyanli的博客 1539

Hdu 1757 A Simple Math Problem 矩阵快速幂

A Simple Math Problem //E #include <bits/stdc++.h> #define ll long long using namespace std; struct Mat{ ll m[101][101]; }; int mod; int n; Mat a,e; Mat mul(Mat x,Mat y){ Mat c; for(int...

恒持此志成永志 249

hdu1757 A Simple Math Problem【矩阵快速幂】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757 题意:题目有一个表达式f(x),让你求他的第k项,即f(k)%m 解析:应该就是一个矩阵快速幂了,构造一个矩阵,草稿纸上算一下不难得出这个矩阵 [0,1,0,0,0,0,0,0,0,0 0,0,1,0,0,0,0,0,0,0 0,0,0,1,0,0,0,0,0,0 0,0,0,0

22h's Blog 390

hdu1757 A Simple Math Problem(矩阵快速幂)

题目点我点我点我 解题思路: (原谅我盗图了,懒得弄这个) 矩阵快速幂直接干搞,最后Fn就是第一个矩阵的第一行乘以第二个矩阵。 最后提醒自己注意矩阵的初始化。 /* *********************************************** ┆ ┏┓   ┏┓ ┆ ┆┏┛┻━━━┛┻┓ ┆ ┆┃       ┃ ┆ ┆

blanKey的博客 550

hdu A Simple Math Problem 1757 矩阵的构造和快速幂

一道矩阵乘法的题目,做了这道题,让我稍微开拓了一点点思维。题意很简单,给你一个函数,如果x 如果x > 10, f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10); a0,a1。。。。a9是常数,题目输入会给出。 做这个题目首先了解下矩阵。有两个矩阵A B,他们的乘积也是一个矩阵C,c[i][j]等于A矩阵

a549875231的专栏 719

hdu 1757 A Simple Math Problem(矩阵快速幂)

A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2780    Accepted Submission(s): 1649 Problem Description Lele

Coding A World 893

HDU 1757 A Simple Math Problem( 矩阵快速幂 )

<font color = red , size = '4'>下列图表转载自 efreet 链接:传送门 题意:给出递推关系,求 f(k) % m 的值, 思路: 因为 k<2 * 10^9 , m < 10^5,O(n)算法应该是T掉了,当 k >= 10 时 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3)...

dijingzhou4259的博客 128

HDU - problem 1757 A Simple Math Problem【矩阵 + 快速幂】

A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4283    Accepted Submission(s): 2573 Problem Description Lele

博客已搬迁到http://www.cnblogs.com/cniwoq/ 307

[HDU1757]A Simple Math Problem(矩阵快速幂)

即使被关在果壳之中,我仍自以为是无限宇宙之王。

zyf2000 814
上一篇: 洛谷 P1939 【模板】矩阵加速(数列)——————矩阵快速幂(水题)
下一篇: HDU 1575 Tr A——————矩阵快速幂
陶鸿杰
博客等级 码龄9年 93粉丝 298原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值