【构造共轭函数+矩阵快速幂】HDU 4565 So Easy! (2013 长沙赛区邀请赛)

链接 :click here~~

题意:

 A sequence Sn is defined as:

Where a, b, n, m are positive integers.┌x┐is the ceil of x. For example, ┌3.14┐=4. You are to calculate Sn.

  You, a top coder, say: So easy!

【解题思路】

给一张神图,推理写的灰常明白了,关键是构造共轭函数,这一点实在是要有数学知识的理论基础,推出了递推式,接下来就是矩阵的快速幂了。

神图:click here~~

代码:

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
#define LL long long
LL MOD;
struct Matrix
{
    long long mapp[2][2];
};
Matrix unin= {1,0,0,1};//单位矩阵
Matrix multi(Matrix a,Matrix b)
{
    Matrix c;
    for(int i=0; i<2; i++)
        for(int j=0; j<2; j++)
        {
            c.mapp[i][j]=0;
            for(int k=0; k<2; k++)
                c.mapp[i][j]+=(a.mapp[i][k]*b.mapp[k][j])%MOD;
            c.mapp[i][j]%=MOD;
        }
    return c;
}
Matrix power(Matrix a,long long n)//矩阵快速幂
{
    Matrix ans=unin;//单位矩阵
    Matrix res=a;
    while(n)
    {
        if(n&1) ans=multi(ans,res);
        res=multi(res,res);
        n>>=1;
    }
    return ans;
}
int main()
{
    LL A,B,N,M,ret;
    Matrix  a,b;
    while(cin>>A>>B>>N>>MOD)
    {
        a.mapp[0][0] = 2*A%MOD;     //递推式
        a.mapp[0][1] = ((B%MOD-A*A%MOD)%MOD+MOD)%MOD;
        a.mapp[1][0] = 1;
        a.mapp[1][1] = 0;
        if(N==1)
        {
            printf("%lld\n",2*A%MOD);
            continue;
        }
        b=power(a,N-1);
        ret=(b.mapp[0][0]%MOD*2*A%MOD+b.mapp[0][1]%MOD*2%MOD)%MOD;
        ret%=MOD;
        printf("%lld\n",ret);
    }
    return 0;
}
时间: 2024-11-01 10:10:21

【构造共轭函数+矩阵快速幂】HDU 4565 So Easy! (2013 长沙赛区邀请赛)的相关文章

矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)

题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Google Codejam Round 1A的C题. #include <bits/stdc++.h> typedef long long ll; const int N = 5; int a, b, n, mod; /* *矩阵快速幂处理线性递推关系f(n)=a1f(n-1)+a2f(n-2)+.

矩阵快速幂——HDU 2604

对应HDU题目:点击打开链接 Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3114    Accepted Submission(s): 1419 Problem Description Queues and Priority Queues are data structures which are known t

[矩阵快速幂] hdu 5015 233 Matrix

之前各种犯傻 推了好久这个东西.. 后来灵关一闪  就搞定了.. 矩阵的题目,就是构造矩阵比较难想! 题意:给出一个矩阵的第一列和第一行(下标从0开始),(0,0)位置为0, 第一行为,233,2333,23333...一次加个3, 第一列为输入的n个数. 然后从(1,1)位置开始,等于上面的数加左边的数,问(n+1,m+1)的数是多少,也就是右下角的数 思路: 把矩阵画出来: |   0     233   2333  | |  b0     b1     b2     | |  c0    

递推+矩阵快速幂 HDU 2065

1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 5 using namespace std; 6 7 //矩阵大小上限 8 const int SIZ=100; 9 int MOD=100; 10 11 //矩阵大小为n*m,初始化全部为0 12 struct mat 13 { 14 int n,m; 15 int ar[SIZ][SIZ]; 16 mat() 17 { 18 memset

矩阵快速幂 [HDU 4549] M斐波那契数列

M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1609    Accepted Submission(s): 460 Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a,

hdu 2256 Problem of Precision 构造整数 + 矩阵快速幂

http://acm.hdu.edu.cn/showproblem.php?pid=2256 题意:给定 n    求解   ? 思路: , 令  , 那么 , 得: 得转移矩阵: 但是上面求出来的并不是结果,并不是整数.需要加上, 由于 所以结果为 #pragma comment(linker, "/STACK:1024000000,1024000000") #include<bits/stdc++.h> using namespace std; #define rep0

[矩阵快速幂] hdu 3936 FIB Query

题意: 求定义y(x)=4*x-1 给L.R求 fib(y(L))~fib(y(R))的和 思路: 和之前做的一道题类似. 定于Fib为 1 1 1 0 我们的第一项就是x=1时的 就是Fib^3 然后下一项其实就是fib(3+4)=Fib^3*Fib^4 所以递推矩阵就是Fib^4 然后求和利用快速的求法 设 Fib E 0    E 这样运算N次右上角的矩阵就是我们要的和的矩阵了 然后就是答案了~! 代码: #include"cstdlib" #include"cstdi

POJ3233 构造子矩阵+矩阵快速幂

题意:给你矩阵A,求S=A+A^1+A^2+...+A^n sol:直接把每一项解出来显然是不行的,也没必要. 我们可以YY一个矩阵: 其中1表示单位矩阵 然后容易得到: 可以看出这个分块矩阵的左下角那块就可以得到要求的解S 我们取这一块,再减去一个单位矩阵1即可. 为了保持右下角一直是1,所以右上的位置必须是0,由于需要不断移位,所以1是必要的,A是必要的,所以第一列保证移位, 第二列保证保留1,因此我们能成功构造出.... 这个题还可以根据等比矩阵的性质来进行求解...后面补(x

[矩阵快速幂] hdu 4990 Reading comprehension

题意: 初始值为零,后面奇数项成二加一,偶数项乘二. 思路: 其实区别就在于这个加一. 就是构造一个-1每次相成,然后1-1+1就ok了. 就是 |  -1   1   0  | | -1  1  0 | * |   0   1   1  |  =  | 1  0  1 | |   0   0   2  | 依次类推就好了. 代码: #include"cstdlib" #include"cstdio" #include"cstring" #inc