1 条题解
-
1
太简单了可以用我的
建议加强数据如下:
下面展示一种高级的做法可过上面数据
#include<bits/stdc++.h> using namespace std; #define int long long #define x first #define y second const int N=2e5+10; const int mod=1000; int n; struct matrix{ int a[5][5]; matrix(){ memset(a,0,sizeof(a)); } }; matrix operator*(const matrix&a,const matrix&b){ matrix ans; for(int i=1;i<=2;i++){ for(int j=1;j<=2;j++){ for(int k=1;k<=2;k++){ ans.a[i][j]+=(a.a[i][k]*b.a[k][j]+mod)%mod; } } } return ans; } matrix qpow(matrix a,int b){ matrix res; for(int i=1;i<=2;i++) res.a[i][i]=1; while(b){ if(b&1) res=(res*a); a=a*a; b>>=1; } return res; } void solve(){ cin>>n; if(n<2){ cout<<1<<'\n'; return; } matrix x; x.a[1][1]=1; x.a[1][2]=1; x.a[2][1]=1; matrix b; b.a[1][1]=b.a[1][2]=1; x=qpow(x,n-2); x=b*x; cout<<x.a[1][1]%mod<<'\n'; } signed main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int T=1; cin>>T; while(T--){ solve(); } return 0; }
- 1
信息
- ID
- 322
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 普及-
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者