2017第二次多校联合Funnyfunction
2017-07-31 16:03
246 查看
题目
题意:这个题意就不用说了吧
题解:矩阵快速幂
dalao博客
题意:这个题意就不用说了吧
题解:矩阵快速幂
dalao博客
#include<bits/stdc++.h> using namespace std; #define ll long long const ll mod=1e9+7; struct bbq { ll a[2][2]; }; bbq mx(bbq a,bbq b) { bbq ans; memset(ans.a,0,sizeof ans.a); for(int i=0; i<2; i++) { for(int j=0; j<2; j++) { for(int k=0; k<2; k++) { ans.a[i][j]+=a.a[i][k]*b.a[k][j]%mod; ans.a[i][j]%=mod; } } } return ans; } bbq qmod(bbq a,ll n) { bbq ans; memset(ans.a,0,sizeof ans.a); ans.a[0][0]=ans.a[1][1]=1; while(n) { if(n%2==1)ans=mx(ans,a); a=mx(a,a); n/=2; } return ans; } int main() { bbq a,b1,b0,ans; int t,ca=1; scanf("%d",&t); memset(a.a,0,sizeof a.a); memset(b0.a,0,sizeof b0.a); memset(b1.a,0,sizeof b1.a); a.a[0][0]=0; a.a[0][1]=2; a.a[1][0]=a.a[1][1]=1; b0.a[0][0]=b0.a[1][1]=1; b0.a[1][0]=b0.a[0][1]=0; b1.a[0][0]=-1; b1.a[0][1]=2; b1.a[1][0]=1; b1.a[1][1]=0; while(t--) { memset(ans.a,0,sizeof ans.a); ll n,m; scanf("%lld %lld",&n,&m); ans=qmod(a,n); if(n%2==0) { for(int i=0; i<2; i++) { for(int j=0; j<2; j++) ans.a[i][j]-=b0.a[i][j]; } } else { for(int i=0; i<2; i++) { for(int j=0; j<2; j++) ans.a[i][j]-=b1.a[i][j]; } } ans=qmod(ans,m-1); printf("%lld\n",(ans.a[0][0]+ans.a[1][0])%mod); } }
相关文章推荐
- 2017第二次多校联合hdu6047Maximum Sequence
- 2017第二次多校联合 hdu6045Is Derek lying?
- 2017多校训练第二场 hdu6050 Funny Function(数学+快速幂+逆元)
- hdu 6050: Funny Function (2017 多校第二场 1006) 【找规律】
- 2017多校2 1006 Funny Function
- 2017第二次多校联合hdu6053Tirck Gcd
- 2017第二次多校联合 hdu6052 tobemyboyfriend
- 2017 多校 Function(置换群
- HDU 2017 多校联合训练赛2 1009 6053 TrickGCD 莫比乌斯函数
- 2017 多校 Function(置换群
- 2017多校联合第二场 1001题 hdu 6045 Is Derek lying?
- 2017 HDU 多校联合赛 Colorful Tree
- 2017第三次多校联合HDU6059
- 2017 HDU 6103 多校联合赛 Kirinriki
- 2017 多校 Function(置换群
- 2017 Multi-University Training Contest 2 && HDOJ 6050 Funny Function 【思维+快速幂】
- 2017 多校训练第一场 HDU 6038 Function
- 2017 多校 Function(置换群
- 2017第四次多校联合hdu6078
- HDU 2017 多校联合训练赛5 5008 6092 Rikka with sebset