比赛 20241025 评测结果 AAAAAAAAAA
题目名称 九连环 最终得分 100
用户昵称 flyfree 运行时间 0.030 s
代码语言 C++ 内存使用 3.34 MiB
提交时间 2024-10-25 09:07:35
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 998244353
inline ll read(){
	ll x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
ll	a[5][5],ans[5];
ll n;
void ad(){
	ll s[5];
	for(int i=1;i<=3;i++)s[i]=ans[i],ans[i]=0;
	for(int i=1;i<=3;i++){
		for(int j=1;j<=3;j++){
			ans[i]=(ans[i]+s[j]*a[i][j])%mod;
		}
	}
}
void cf(){
	ll s[5][5];
	for(int i=1;i<=3;i++)for(int j=1;j<=3;j++)s[i][j]=a[i][j],a[i][j]=0;
	for(int i=1;i<=3;i++){
		for(int j=1;j<=3;j++){
			for(int u=1;u<=3;u++){
				a[i][j]=(a[i][j]+s[i][u]*s[u][j]%mod)%mod;
			}
		}
	}
}
int main(){
	freopen("X.in","r",stdin);
	freopen("X.out","w",stdout);
	a[1][1]=2,a[2][3]=1,a[3][1]=1,a[3][2]=1;
	ans[1]=2,ans[2]=0,ans[3]=1;
	n=read();
	n--;
	while(n){
		if(n&1)ad();
		cf();
//		for(int i=1;i<=3;i++){
//			for(int j=1;j<=3;j++)cout<<a[j][i]<<" ";
//			cout<<endl;
//		}
//		cout<<"------------\n";
		n/=2;
	}
	cout<<ans[3];
	return 0;
}