hdoj 4990 Reading comprehension(矩阵快速幂)
来源:互联网 发布:软件项目管理ppt 编辑:程序博客网 时间:2024/05/21 12:48
找到递推式,接下来构造矩阵就可以了。
还要注意用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;
}
#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
BestCoder Round #8
Recommend
heyang | We have carefully selected several similar problems for you: 5932 5931 5930 5929 5928
0 0
- 【矩阵快速幂】 HDOJ 4990 Reading comprehension
- HDOJ 4990 Reading comprehension(矩阵快速幂)
- hdoj 4990 Reading comprehension(矩阵快速幂)
- 【矩阵快速幂-找规律】HDOJ Reading comprehension 4990
- hdu 4990 Reading comprehension (矩阵快速幂)
- hdu 4990 Reading comprehension(矩阵快速幂)
- [矩阵快速幂] hdu 4990 Reading comprehension
- HDU - 4990 Reading comprehension (矩阵快速幂)
- HDU 4990 Reading comprehension (矩阵快速幂)
- hdu 4990 Reading comprehension 矩阵快速幂
- hdu-4990 Reading comprehension(快速幂+矩阵)
- HDU 4990 Reading comprehension(找规律+矩阵快速幂)
- HDU 4990 Reading comprehension(矩阵快速幂优化)
- HDU 4990 Reading comprehension(矩阵快速幂)
- HDU 4990 Reading comprehension(找规律+矩阵快速幂)
- HDU 4990 Reading comprehension (找规律+矩阵快速幂)
- HDU 4990 Reading comprehension(找规律)(矩阵快速幂)
- hdu4990---Reading comprehension(矩阵快速幂)
- git使用摘要
- iOS 通用赋值model类
- CodeBlocks安装及使用
- TOF相机-非扫描三维成像
- 如何写一个框架:步骤(上)
- hdoj 4990 Reading comprehension(矩阵快速幂)
- MFC中 'CString' to 'WPARAM'之间的转换
- Swift_继承
- KIWI祭
- C和指针读书笔记(第十四章)
- 为什么绝大多数抄袭的游戏会失败?
- compileSdkVersion为23以下的应用运行在Android6.0的拍照权限处理(拍照时onActivityResult的data返回为null的处理办法)
- -[UITextTapRecognizer velocityInView:]: unrecognized selector sent to instance 0x6080003c3a20
- UIAlertViewController 基本使用+自定义(字体颜色,大小,对齐方式)