求助代码为什么RE
  • 板块学术版
  • 楼主kbzcz
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/7/11 10:34
  • 上次更新2024/7/11 11:31:04
查看原帖
求助代码为什么RE
416192
kbzcz楼主2024/7/11 10:34

本地直接RE,IDE说MLE,感觉没开很大内存啊。

bool _Start;
#include <bits/stdc++.h>
using namespace std;
#define il inline
#define Tp template<typename T>
#define Ts template<typename T,typename... _T>
Tp il void read(T& x) {
	x=0;bool f=0;char c=getchar();
	for(;!isdigit(c);c=getchar()) f|=c=='-';
	for(;isdigit(c);c=getchar()) x=(x<<1)+(x<<3)+(c^48);
	x=(f?-x:x);
}Ts il void read(T& x,_T&... y) {read(x),read(y...);}
const int N=8010,mod=1004535809;
using ll=long long;
ll n,m,K,S;
ll a[N],tot[N];
il ll qpow(ll a,ll b) {
	ll res=1;
	for(;b;b>>=1,a=a*a%m)
		if(b&1) res=res*a%m;
	return res;
}
ll exgcd(ll a,ll b,ll &x,ll &y) {
	if(b==0) return x=1,y=0,a;
	ll d=exgcd(b,a%b,y,x);
	y-=a/b*x;
	return d;
}
struct matrix {
	ll a[N][N];
	matrix(int n=0) {
		memset(a,0,sizeof(a));
		for(int i=1;i<=n;i++) a[i][i]=1;
	}
	ll* operator[](int x) {return a[x];}
	friend matrix operator*(matrix A,matrix B) {
		matrix C=matrix();
		for(int i=1;i<=m;i++)
			for(int j=1;j<=m;j++)
				for(int k=1;k<=m;k++)
					C[i][j]=(C[i][j]+A[i][k]*B[k][j])%mod;
		return C;
	}
}bs,f;
il matrix mqpow(matrix A,ll b) {
	matrix res=matrix(m);
	for(;b;b>>=1,A=A*A)
		if(b&1) res=res*A;
	return res;
}
bool _End;
int main() {
	fprintf(stderr,"Memory: %.4lf Mib\n",abs(&_End-&_Start)/1048576.0);
	read(n,m,K,S);
	for(int i=1;i<=S;i++) read(a[i]);
	for(int i=1;i<=S;i++) tot[qpow(a[i],m-2)]++;
	for(int i=1;i<=m;i++) bs[0][i]=tot[0];
	for(int i=2;i<=m;i++) {
		for(int j=1;j<=m;j++) {
			ll x,y;
			exgcd(j,m,x,y);
			x=(x%m+m)%m;
			bs[i][j]=tot[x*(i-1)%m];
		}
	}
	bs=mqpow(bs,n);
	f[1][1]=1;
	f=bs*f;
	printf("%lld",f[K+1][1]);
	return 0;
}

2024/7/11 10:34
加载中...