RE?
查看原帖
RE?
836448
stylus楼主2024/7/1 23:36
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,k,a[5],m=998244353;
struct node{
	ll a[6][6];
	node(){memset(a,0,sizeof(a));}
	node set(){a[0][0]=a[1][1]=a[2][2]=a[3][3]=a[4][4]=a[5][5]=1;}
}s[4],ans,b,r,e;
node operator*(const node &x,const node &y){
	node z;
	for(ll i=0;i<=5;i++)
	    for(ll j=0;j<=5;j++)
	        for(ll k=0;k<=5;k++)z.a[i][j]=(z.a[i][j]+x.a[i][k]*y.a[k][j])%m; 
	return z;
}
node qp(node x,ll y){
	node ans;
	ans=e;
	while(y){
		if(y&1ll)ans=x*ans;
		x=x*x;
		y>>=1ll;
	}return ans;
}
int main(){
	cin>>n>>k;
	s[1].a[0][1]=s[1].a[1][2]=s[1].a[2][3]=s[1].a[3][4]=s[1].a[4][5]=s[1].a[5][5]=s[2].a[1][0]=s[2].a[0][1]=s[2].a[2][1]=s[2].a[3][2]=s[2].a[4][3]=s[2].a[5][4]=s[3].a[0][1]=s[3].a[1][2]=s[3].a[2][3]=s[3].a[3][4]=s[3].a[4][5]=s[3].a[5][5]=1,s[3].a[1][0]=s[3].a[0][1]=s[3].a[2][1]=s[3].a[3][2]=s[3].a[4][3]=s[3].a[5][4]=1,b.set();
    e.set(),b=e;
	for(int i=1;i<=4;i++)cin>>a[i],b=b*s[a[i]];
	r.a[0][k]=1;
    ans=r*qp(b,n/4);
    for(int i=0;i<n%4;i++)ans=ans*s[a[i+1]];
	cout<<(ans.a[0][0]+ans.a[0][1]+ans.a[0][2]+ans.a[0][3]+ans.a[0][4]+ans.a[0][5])%m;
	return 0;
}
2024/7/1 23:36
加载中...