求助,WA了九个
查看原帖
求助,WA了九个
551803
BPG_ning楼主2023/1/20 13:47
#include<iostream>
#include<stdio.h>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<bitset>
#include<set>
using namespace std;
typedef long long LL;
typedef double db;
const LL maxn=1e5+10,mod=998244353;
LL t,n,a,b,x,y;
LL f1[maxn],f2[maxn];
LL ans;
LL pow(LL a,LL b){
	LL sum=1;
	for(;b;b>>=1,a=(a*a)%mod) if(b&1) sum=sum*a,sum%=mod;
	return sum;
}
int main() {
	ios::sync_with_stdio(false);
	std::cin.tie(0);
	std::cout.tie(0);
	freopen("nzq.in","r",stdin);
	freopen("nzq.out","w",stdout);
	cin>>t;
	while(t--){
		ans=1;
		cin>>n>>a>>b>>x>>y;
		f1[1]=a,f1[2]=b;
		f2[1]=x,f2[2]=y;
		LL o1=2,o2=2;
		while(f1[o1]!=f1[o1-1]){o1++,f1[o1]=sqrt(f1[o1-1]*f1[o1-2])+1;}
		while(f2[o2]!=f2[o2-1]){o2++,f2[o2]=sqrt(f2[o2-1]*f2[o2-2])+1;}
		while(o1<o2){o1++,f1[o1]=sqrt(f1[o1-1]*f1[o1-2])+1;}
		while(o1>o2){o2++,f2[o2]=sqrt(f2[o2-1]*f2[o2-2])+1;}
		if(n<=o1){
			for(int i=1;i<=n;i++){
				ans=ans*(f2[i]-f1[i]);
				ans%=mod;
			}
			cout<<((ans%mod)+mod)%mod<<endl;
			continue;
		}
		for(int i=1;i<=o1;i++){
//			cout<<ans<<' '<<f2[i]<<' '<<f1[i]<<endl;
			ans=ans*(f2[i]-f1[i]);
			ans%=mod;
		}
		LL d1=(f1[o1]==f1[o1-1]),d2=(f2[o2]==f2[o2-1]);
		if(d1==d2) ans=ans*pow(f2[o2]-f1[o1],(LL)n-o1),ans%=mod;
		else{
			o2++;
			f2[o2]=sqrt(f2[o2-1]*f2[o2-2])+1;
			o1++;
			f1[o1]=sqrt(f1[o1-1]*f1[o1-2])+1;
			o2--,o1--;
//			cout<<o1<<' '<<o2<<' '<<f1[o1]<<' '<<f2[o2]<<' '<<f1[o1+1]<<' '<<f2[o2+1]<<endl;
//			cout<<ans<<endl;
			ans=ans*pow(f2[o2]-f1[o1],(LL)(n-o1)/2);
			ans%=mod;
			ans=ans*pow(f2[o2+1]-f1[o1+1],(LL)(n-o1)/2);
			ans%=mod;
			if((n-o1)&1) ans=ans*(f2[o2+1]-f1[o1+1]);
			ans%=mod;
		}
		cout<<((ans%mod)+mod)%mod<<endl;
	}
	return 0;
}
/*
5
114514 1 10 8 7
114514 1 10 8 7
114514 1 10 8 7
114514 1 10 8 7
114514 1 10 8 7
*/

感觉没问题,但是就是WA了

2023/1/20 13:47
加载中...