10分样例没过求助(玄馆)
查看原帖
10分样例没过求助(玄馆)
777848
superkkkeee楼主2024/8/8 11:47
#include<bits/stdc++.h>
using namespace std;
#define int __int128
struct node
{
	int n;
	int m[10][10];
};
node A;
node Q;
int mod;
node cheng(node a,node b)
{
	node c;
	memset(c.m,0,sizeof(c.m));
	for(int i=1;i<=2;i++)
	{
		for(int j=1;j<=2;j++)
		{
			for(int k=1;k<=2;k++)
			{
				c.m[i][j]=(c.m[i][j]+(a.m[i][k]*b.m[k][j])%mod)%mod;
			}
		}
	}
	return c;
}
node cheng2(node a,node b)
{
	node c;
	memset(c.m,0,sizeof(c.m));
	for(int i=1;i<=2;i++)
	{
		for(int j=1;j<=1;j++)
		{
			for(int k=1;k<=2;k++)
			{
				c.m[i][j]=(c.m[i][j]+(a.m[i][k]*b.m[k][j])%mod)%mod;
			}
		}
	}
	return c;
}
node ksm(node a,int b)
{
	node ret;
	memset(ret.m,0,sizeof(ret.m));
	for(int i=1;i<=2;i++) ret.m[i][i]=1;
	while(b)
	{
		if(b&1)
		{
			ret=cheng(ret,a);
		}
		a=cheng(a,a);
		b>>=1;
	}
	return ret;
}
void re(int &x)
{
	long long q; cin>>q;
	x=q;
}
void write(int x)
{
	if (x<0)
	{
    	putchar('-');
    	x = -x;
	}
	if (x > 9) write(x / 10);
	putchar(x % 10 ^ 48);
}
signed main()
{
	int x,a,c,n,g;
	//cin>>mod>>a>>c>>x>>n>>g;
	re(mod); re(a); re(c); re(x); re(n); re(g);
	A.n=2;
	A.m[1][1]=a; A.m[1][2]=1;
	A.m[2][1]=0; A.m[2][2]=1;
	Q.m[1][1]=x; Q.m[2][1]=c;
	if(n<=1) return write(x),0;
	node ans=ksm(A,n-2);
	node aans=cheng2(ans,Q);
	//cout<<aans.m[1][1]%mod%g;
	write(aans.m[1][1]%mod%g);
	return 0;
}
2024/8/8 11:47
加载中...