比赛 20241025 评测结果 AAAAAAAAAA
题目名称 九连环 最终得分 100
用户昵称 小金 运行时间 0.030 s
代码语言 C++ 内存使用 3.56 MiB
提交时间 2024-10-25 11:11:17
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const long long mod=998244353;
long long n,n2,ans;
void mul(long long f[2],long long a[2][2])
{
	long long c[2];
	memset(c,0,sizeof(c));
	for(int j=0;j<2;j++)
	{
		for(int k=0;k<2;k++)
		{
			c[j]=(c[j]+f[k]*a[k][j]%mod)%mod;
		}
	}
	memcpy(f,c,sizeof(c));
}
void mulself(long long a[2][2])
{
	long long c[2][2];
	memset(c,0,sizeof(c));
	for(int i=0;i<2;i++)
	{
		for(int j=0;j<2;j++)
		{
			for(int k=0;k<2;k++)
			{
				c[i][j]=(c[i][j]+a[i][k]*a[k][j]%mod)%mod;
			}
		}
	}
	memcpy(a,c,sizeof(c));
}
int main()
{
	freopen("X.in","r",stdin);
    freopen("X.out","w",stdout);
	scanf("%lld",&n);
	long long f[2]={0,1};
	long long a[2][2]={{0,2},{1,1}};
	n2=n;
	for(;n;n>>=1)
	{
		if(n&1) mul(f,a);
		mulself(a);
	}
	ans=(f[1]+n)%mod;
	if(n2%2==0) ans--;
	printf("%lld",ans);
	return 0;
}