能看看是哪里没取模吗
查看原帖
能看看是哪里没取模吗
220824
yyz1005楼主2023/11/28 16:37

应该只有取模能错了

调了一下午

#include<bits/stdc++.h>
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast,no-stack-protector")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#pragma GCC optimize("-fdelete-null-pointer-checks,inline-functions-called-once,-funsafe-loop-optimizations,-fexpensive-optimizations,-foptimize-sibling-calls,-ftree-switch-conversion,-finline-small-functions,inline-small-functions,-frerun-cse-after-loop,-fhoist-adjacent-loads,-findirect-inlining,-freorder-functions,no-stack-protector,-fpartial-inlining,-fsched-interblock,-fcse-follow-jumps,-fcse-skip-blocks,-falign-functions,-fstrict-overflow,-fstrict-aliasing,-fschedule-insns2,-ftree-tail-merge,inline-functions,-fschedule-insns,-freorder-blocks,-fwhole-program,-funroll-loops,-fthread-jumps,-fcrossjumping,-fcaller-saves,-fdevirtualize,-falign-labels,-falign-loops,-falign-jumps,unroll-loops,-fsched-spec,-ffast-math,Ofast,inline,-fgcse,-fgcse-lm,-fipa-sra,-ftree-pre,-ftree-vrp,-fpeephole2",3)
using namespace std;
typedef __int128 ll;
ll read(){
	ll x = 0,h = 1;
	char ch = getchar();
	while(!(ch=='-'||('0'<=ch&&ch<='9'))) ch = getchar();
	if(ch=='-') h = -1;
	else x = ch-'0';
	ch = getchar();
	while('0'<=ch&&ch<='9'){
		x = x*10+ch-'0';
		ch = getchar();
	}
	return x*h;
}
const ll N = 20;
const ll mod = 1e9+7;
struct matrix{
	ll h,l;
	ll rix[N][N];
	inline void rememset(){
		memset(rix,0,sizeof(rix));
	}
	inline void build(ll siz1,ll siz2){
		h = siz1;l = siz2;
		memset(rix,0,sizeof(rix));
	}
	inline void push(ll x,ll y,ll val){
		rix[x][y] = val%mod;
	}
	inline matrix operator *(const matrix &x) const{
		matrix res;
		res.build(h,x.l);
		for(ll i = 1; i <= h; i++){
			for(ll j = 1; j <= x.l; j++){
				for(ll k = 1; k <= l; k++){
					res.rix[i][j] = (res.rix[i][j]+rix[i][k]*x.rix[k][j]%mod)%mod;
				}
			}
		}
		return res;
	}
	/*
	inline void print(){
		for(ll i = 1; i <= h; i++){
			for(ll j = 1; j <= l; j++){
				printf("%lld ",rix[i][j]);
			}
			puts("");
		}
	}
	*/
};
inline matrix mul(matrix based,ll k){
	matrix ans;
	ans.build(based.h,based.l);
	//ans = based,k-=1;
	for(ll i = 1; i <= based.h; i++) ans.push(i,i,1);
	while(k){
		if(k&1LL) ans = ans*based;
		based = based*based;
		k>>=1LL;
	}
	return ans;
}
ll n,f1,f2,f3,c;
ll muls[N][N] = {
{0,0,0,0,0,0},
{0,0,0,1,0,0},
{0,1,0,1,0,0},
{0,0,1,1,0,0},
{0,0,0,1,1,0},
{0,0,0,2,2,1}
};
ll mulx[N][N] = {
{0,0,0,0},
{0,0,0,1},
{0,1,0,1},
{0,0,1,1}
};
ll pw(ll x,ll k){
	ll res = 1LL;
	while(k){
		if(k&1LL) res = res*x%mod;
		x = x*x%mod;
		k>>=1LL;
	}
	return res;
}
void print(ll x){
	if(x<0LL) putchar('-'),x = -x;
	if(x>9LL) print(x/10LL);
	putchar(x%10LL+48LL);
	
}
int main(){
	freopen("data.txt","r",stdin); 
	n = read();
	f1 = read(),f2 = read(),f3 = read(),c = read();
	f1%=mod;
	f2%=mod;
	f3%=mod;
	c%=mod;
	matrix base;
	base.build(5,5);
	for(ll i = 1; i <= 5; i++) for(ll j = 1; j <= 5; j++) base.push(i,j,muls[i][j]);
	matrix xc;
	xc.build(1,5);
	xc.push(1,5,1);
	ll pwc = (xc*mul(base,n-3LL)).rix[1][3];
	base.build(3,3);
	for(ll i = 1; i <= 3; i++) for(ll j = 1; j <= 3; j++) base.push(i,j,mulx[i][j]);
	base = mul(base,n-3LL);
	xc.build(1,3);xc.push(1,1,1);
	ll pw1 = (xc*base).rix[1][3];
	xc.build(1,3);xc.push(1,2,1);
	ll pw2 = (xc*base).rix[1][3];
	xc.build(1,3);xc.push(1,3,1);
	ll pw3 = (xc*base).rix[1][3];
	print(pwc),putchar(' ');
	print(pw1),putchar(' ');
	print(pw2),putchar(' ');
	print(pw3),putchar('\n');
	print(pw(c,pwc)%mod*pw(f1,pw1)%mod*pw(f2,pw2)%mod*pw(f3,pw3)%mod);
	return 0;
}

2023/11/28 16:37
加载中...