HDU4990 Reading comprehension【矩阵快速幂】
程序员文章站
2022-07-12 09:42:05
...
Reading comprehension
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2334 Accepted Submission(s): 959
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;
}
#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
[Technical Specification]
1<=n, m <= 1000000000
Output
For each case,output an integer,represents the output of above program.
Sample Input
1 103 100
Sample Output
15
Source
问题链接:HDU4990 Reading comprehension
问题简述:(略)
问题分析:占个位置,不解释。
程序说明:(略)
题记:(略)
参考链接:(略)
AC的C++语言程序如下:
/* HDU4990 Reading comprehension */
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
typedef long long LL;
const int N = 2;
struct Matrix
{
LL m[N + 1][N + 1];
Matrix()
{
memset(m, 0, sizeof(m));
}
};
Matrix Matrix_Mul(Matrix a, Matrix b, LL mod)
{
Matrix c;
for(int i=1; i<=N; i++)
for(int j=1; j<=N; j++)
for(int k=1; k<=N; k++)
c.m[i][j] = (c.m[i][j] + a.m[i][k] * b.m[k][j]) % mod;
return c;
}
// 矩阵模幂
Matrix Matrix_Powmul(Matrix a, int m, LL mod)
{
Matrix c;
for(int i=1; i<=N; i++)
c.m[i][i] = 1;
while(m) {
if(m & 1)
c = Matrix_Mul(c, a, mod);
a = Matrix_Mul(a, a, mod);
m >>= 1;
}
return c;
}
int main()
{
LL n, mod;
Matrix a, t;
while(~scanf("%lld%lld", &n, &mod)) {
a.m[1][1] = 4;
a.m[1][2] = 2;
a.m[2][1] = 0;
a.m[2][2] = 1;
t = Matrix_Powmul(a, n / 2, mod);
LL ans = t.m[1][2];
if(n % 2)
ans = (ans * 2 + 1) % mod;
printf("%lld\n", ans);
}
return 0;
}
上一篇: ROS-rosserial概述(2)
下一篇: HDU - 4990
推荐阅读
-
矩阵乘法(二):利用矩阵快速幂运算完成递推
-
FZU2018级算法第一次作业 1.1fibonacci (矩阵快速幂)
-
2018年湘潭大学程序设计竞赛G又见斐波那契(矩阵快速幂)
-
HDU 2256Problem of Precision(矩阵快速幂)
-
洛谷P1397 [NOI2013]矩阵游戏(十进制矩阵快速幂)
-
POJ3233Matrix Power Series(矩阵快速幂)
-
BZOJ1898: [Zjoi2005]Swamp 沼泽鳄鱼(矩阵快速幂)
-
BZOJ2476: 战场的数目(矩阵快速幂)
-
矩阵乘法(四):分析问题,确定递推式,采用矩阵快速幂求解
-
矩阵乘法(二):利用矩阵快速幂运算完成递推