1 条题解

  • 1
    @ 2026-8-14 11:36:02

    太简单了可以用我的

    建议加强数据如下:

    ai<=1e16a_i<=1e16

    N<=1e5N<=1e5

    下面展示一种高级的做法可过上面数据

    #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
    上传者