HDU 4686 arc of Dream (recursive matrix acceleration)

Source: Internet
Author: User

This is to give you a formula that is multiplied by two Recursive formulas, so that you can obtain the result of nth.

Note that this recursive operation requires the formula to be multiplied and then the matrix is constructed.

Arc of dream Time Limit: 2000/2000 MS (Java/others) memory limit: 65535/65535 K (Java/Others)
Total submission (s): 2092 accepted submission (s): 664


Problem descriptionan arc of dream is a curve defined by following function:

Where
A0 = A0
Ai = ai-1 * AX + AY
B0 = b0
Bi = bi-1 * bx +
What is the value of AOD (n) modulo 1,000,000,007?
Inputthere are multiple test cases. process to the end of file.
Each test case contains 7 nonnegative integers as follows:
N
A0 ax ay
B0 BX
N is no more than 1018, and all the other integers are no more than 2 × 109.
Outputfor each test case and output AOD (n) modulo 1,000,000,007.
Sample Input
11 2 34 5 621 2 34 5 631 2 34 5 6

Sample output
41341902

#include <algorithm>#include <iostream>#include <stdlib.h>#include <string.h>#include <iomanip>#include <stdio.h>#include <string>#include <queue>#include <cmath>#include <stack>#include <map>#include <set>#define eps 1e-10///#define M 1000100#define LL __int64///#define LL long long///#define INF 0x7ffffff#define INF 0x3f3f3f3f#define PI 3.1415926535898#define zero(x) ((fabs(x)<eps)?0:x)#define mod 1000000007const int maxn = 210;using namespace std;struct matrix{    LL f[10][10];};matrix mul(matrix a, matrix b, int n){    matrix c;    memset(c.f, 0, sizeof(c.f));    for(int i = 0; i < n; i++)    {        for(int j = 0; j < n; j++)        {            for(int k = 0; k < n; k++) c.f[i][j] += a.f[i][k]*b.f[k][j];            c.f[i][j] %= mod;        }    }    return c;}matrix pow_mod(matrix a, LL b, int n){    matrix s;    memset(s.f, 0 , sizeof(s.f));    for(int i = 0; i < n; i++) s.f[i][i] = 1LL;    while(b)    {        if(b&1) s = mul(s, a, n);        a = mul(a, a, n);        b >>= 1;    }    return s;}matrix Add(matrix a,matrix b, int n) {    matrix c;    for(int i = 0; i < n; i++)    {        for(int j = 0; j < n; j++)        {            c.f[i][j] = a.f[i][j]+b.f[i][j];            c.f[i][j] %= mod;        }    }    return c;}int main(){    LL n;    LL a, ax, ay;    LL b, bx, by;    while(~scanf("%I64d",&n))    {        scanf("%I64d %I64d %I64d",&a, &ax, &ay);        scanf("%I64d %I64d %I64d",&b, &bx, &by);        a %= mod;        ax %= mod;        ay %= mod;        b %= mod;        bx %= mod;        by %= mod;        LL ff = a*b%mod;        LL x = (a*ax+ay)%mod;        LL y = (b*bx+by)%mod;        LL pp = (x*y)%mod;        if(n == 0)        {            puts("0");            continue;        }        matrix c;        memset(c.f, 0 ,sizeof(c.f));        c.f[0][0] = ax*bx%mod;        c.f[0][1] = ax*by%mod;        c.f[0][2] = ay*bx%mod;        c.f[0][3] = ay*by%mod;        ///c.f[0][4] = 1LL;        c.f[1][1] = ax;        c.f[1][3] = ay;        c.f[2][2] = bx;        c.f[2][3] = by;        c.f[3][3] = 1LL;        c.f[4][0] = 1LL;        c.f[4][4] = 1LL;        matrix d = pow_mod(c, n-1LL, 5);        LL sum = 0LL;        sum += ((d.f[4][0]*pp%mod)+(d.f[4][4]*ff%mod))%mod;        sum += ((d.f[4][1]*x%mod) + (d.f[4][2]*y%mod) + d.f[4][3]%mod)%mod;        printf("%I64d\n",(sum+mod)%mod);    }    return 0;}


HDU 4686 arc of Dream (recursive matrix acceleration)

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.