您的位置:首页 > 其它

hdoj 4990 Reading comprehension(矩阵快速幂)

2016-10-15 16:07 162 查看


找到递推式,接下来构造矩阵就可以了。

还要注意用long long存矩阵

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll m;

struct node
{
ll s[3][3];
node() {}
node(ll a, ll b, ll c, ll d, ll e, ll f, ll g, ll h, ll i)
{
s[0][0] = a;
s[0][1] = b;
s[0][2] = c;
s[1][0] = d;
s[1][1] = e;
s[1][2] = f;
s[2][0] = g;
s[2][1] = h;
s[2][2] = i;
}
};

node mul(node a, node b)
{
node t;
memset(t.s, 0, sizeof(t.s));
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
for(int k = 0; k < 3; k++)
t.s[i][j] = (t.s[i][j]+a.s[i][k]*b.s[k][j])%m;
return t;
}

node mt_pow(node p, int n)
{
node q;
memset(q.s, 0, sizeof(q.s));
q.s[0][0] = q.s[1][1] = q.s[2][2] = 1;
while(n)
{
if(n&1) q = mul(p, q);
p = mul(p, p);
n /= 2;
}
return q;
}

int main(void)
{
ll n;
while(cin >> n >> m)
{
if(n == 1) printf("%d\n", 1%m);
else if(n == 2) printf("%d\n", 2%m);
else
{
node base = node(1, 2, 1, 1, 0, 0, 0, 0, 1);
node ans = mt_pow(base, n-2);
printf("%lld\n", (ans.s[0][0]*2+ans.s[0][1]+ans.s[0][2])%m);
}
}
return 0;
}



Reading comprehension

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 1520    Accepted Submission(s): 611


Problem Description

Read the program below carefully then answer the question.

#pragma comment(linker, "/STACK:1024000000,1024000000")

#include <cstdio>

#include<iostream>

#include <cstring>

#include <cmath>

#include <algorithm>

#include<vector>

const int MAX=100000*2;

const int INF=1e9;

int main()

{

  int n,m,ans,i;

  while(scanf("%d%d",&n,&m)!=EOF)

  {

    ans=0;

    for(i=1;i<=n;i++)

    {

      if(i&1)ans=(ans*2+1)%m;

      else ans=ans*2%m;

    }

    printf("%d\n",ans);

  }

  return 0;

}

 

Input

Multi test cases,each line will contain two integers n and m. Process to end of file.
[Technical Specification]

1<=n, m <= 1000000000

 

Output

For each case,output an integer,represents the output of above program.

 

Sample Input

1 10
3 100

 

Sample Output

1
5

 

Source

BestCoder Round #8

 

Recommend

heyang   |   We have carefully selected several similar problems for you:  5932 5931 5930 5929 5928 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息