比赛 |
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;
}