垃圾代码求卡常
  • 板块题目总版
  • 楼主coderJerry
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/19 20:35
  • 上次更新2024/8/19 22:49:12
查看原帖
垃圾代码求卡常
953589
coderJerry楼主2024/8/19 20:35

rt,不太会卡常,代码很垃圾大佬轻喷

#include <bits/stdc++.h>
#define int long long
using namespace std;
namespace matrix{
	vector<vector<int>> mul(vector<vector<int>> a,vector<vector<int>> b,int mod){
		int n=a.size();
		vector<vector<int>> ans(n,vector<int>(n,0));
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				for(int k=0;k<n;k++){
					ans[i][j]=(ans[i][j]+(a[i][k]*b[k][j]))%mod;
				}
			}
		}
		return ans;
	}
	vector<vector<int>> qpow(vector<vector<int>> a,int b,int mod){
		if(b==1) return a;
		vector<vector<int>> ans=matrix::qpow(a,b/2,mod);
		ans=matrix::mul(ans,ans,mod);
		if(b%2==1) ans=matrix::mul(ans,a,mod);
		return ans;
	}
}
const int mod=1e9+7;
signed main(){
    vector<vector<int>> f(2,vector<int>(2,0));
	f[0][0]=1;f[0][1]=1;f[1][0]=1;f[1][1]=0;
    int t,p,n;cin>>t;
	while(t--){
	    cin>>n>>p;
	    if(n==1){cout<<"2\n";continue;}
	    vector<vector<int>> ans=matrix::qpow(f,n-1,p);
	    int fn1=(ans[0][0]+ans[0][1]);
	    int fn=(ans[1][0]+ans[1][1]);
	    cout<<((fn*fn%p*fn1%p)+(fn*fn1%p))%p<<endl;
	}
    return 0;
}

状态:TLE 1,3,4,6

2024/8/19 20:35
加载中...