求调!!莫名报错
查看原帖
求调!!莫名报错
1135546
qwp____5_0_3楼主2025/1/26 20:06
#include<iostream>
#include<stdio.h>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string.h>

#define jc[i][j] jc.a[i][j]
#define res[i][j] res.a[i][j]
#define base[i][j] base.a[i][j]
#define ans[i][j] ans.a[i][j]
#define x[i][j] x.a[i][j]
#define y[i][j] y.a[i][j]
#define ll long long 
#define N 15

inline ll read();

struct Matrix{
	int n,m;
	ll a[N][N];
	inline void empty(){
		memset(a,0,sizeof(a));
	}	
};
Matrix base,res,ans,jc;

ll n,mod,p,q,r,t,u,v,w,x,y,z;
inline void prepare();
inline void init();
inline ll gsc(ll a,ll b,ll mod);
inline Matrix operator *(Matrix x,Matrix y);
inline Matrix ksm(Matrix x,ll k);

int main()
{
	prepare();
	if(n<2)
	{
		printf("nodgd 1\n");
		printf("Ciocio 1\n");
		printf("Nicole 1\n");
		return 0;
	}
	init();
	ans=ans*ksm(base,n-2);
	printf("nodgd %lld\n",ans[1][1]);
	printf("Ciocio %lld\n",ans[1][2]);
	printf("Nicole %lld\n",ans[1][3]);
	return 0;
}
inline ll read()
{
	ll sum=0;
	bool flag=0;
	char c=getchar();
	while(c<'0'||c>'9')
	{
	    if(c=='-')flag=1;
	    c=getchar();
	}		
	while(c>='0'&&c<='9')
	{
		sum=sum*10+c-'0';
		c=getchar();
	}
	if(flag)return -sum;
	else return sum;
}
inline void prepare()
{
	n=read(),mod=read();
	p=read(),q=read(),r=read(),t=read();
	u=read(),v=read(),w=read();
	x=read(),y=read(),z=read();
}
inline void init()
{
	//res
	for(int i=1;i<=11;i++)jc[i][j]=1;
	//base
	base.n=base.m=11;
	base[1][1]=p,base[1][2]=base[1][3]=base[1][4]=1;
	base[2][2]=u,base[2][1]=base[2][3]=base[2][5]=1;
	base[3][3]=x,base[3][1]=base[3][2]=base[3][6]=1;
	base[4][1]=q;
	base[5][2]=v;
	base[6][3]=y;
	base[7][1]=r,base[7][7]=1;
	base[8][1]=t,base[8][3]=base[8][8]=1,base[8][7]=2;
	base[9][3]=2,base[9][1]=base[9][7]=base[9][8]=base[9][9]=1;
	base[10][10]=w,base[10][2]=1;
	base[11][11]=z,base[11][3]=1;
	//ans
	ans.n=1,ans.m=11;
	ans[1][1]=ans[1][2]=ans[1][3]=3;
	ans[1][4]=ans[1][5]=ans[1][6]=ans[1][7]=ans[1][8]=ans[1][9]=1;
	ans[1][10]=w;
	ans[1][11]=z; 
}
inline ll gsc(ll a,ll b,ll mod)
{
	ll res=0;
	while(b)
	{
		if(b&1)
		{
			res+=a;
			res%=mod;
		}
		a+=a;
		a%=res;
		b>>=1;
	} 
	return res; 
}
inline Matrix operator *(Matrix x,Matrix y)
{
	memset(res.a,0,sizeof(res.a));
	res.n=x.n;
	res.n=y.m;
	for(int i=1;i<=x.n;i++)
	{
		for(int j=1;j<=y.m;j++)
		{
			for(int k=1;k<=x.m;k++)
			{
				res[i][j]+=(gsc(x[i][k],y[k][j],mod));
				res[i][j]%=mod;
			}
		}
	}
	return res;
}
inline Matrix ksm(Matrix x,ll k)
{
	jc.n=a.n;
	jc.m=a.n;
	whlie(k)
	{
		if(k&1)jc=jc*x;
		k>>=1;
		x=x*x;
	}
	return res;
}
2025/1/26 20:06
加载中...