結果
| 問題 |
No.2156 ぞい文字列
|
| コンテスト | |
| ユーザー |
chro_96
|
| 提出日時 | 2022-12-09 21:58:24 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,309 bytes |
| コンパイル時間 | 1,584 ms |
| コンパイル使用メモリ | 28,928 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-10-14 21:54:17 |
| 合計ジャッジ時間 | 2,667 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 16 |
ソースコード
#include <stdio.h>
void func (long long n, long long mod_num, long long *dp) {
long long tmp[4] = {};
if (n == 1LL) {
dp[0] = 0LL;
dp[1] = 0LL;
dp[2] = 0LL;
dp[3] = 1LL;
return;
}
func(n/2LL, mod_num, dp);
tmp[0] = 2LL*(dp[0]+dp[2])%mod_num;
tmp[1] = (dp[1]+dp[3])%mod_num;
tmp[0] += (dp[0]*(dp[0]+dp[2]))%mod_num;
tmp[0] += (dp[1]*dp[0])%mod_num;
tmp[1] += (dp[0]*(dp[1]+dp[3]))%mod_num;
tmp[1] += (dp[1]*dp[1])%mod_num;
tmp[2] = (dp[2]+dp[3])%mod_num;
tmp[2] += (dp[2]*(dp[0]+dp[2]))%mod_num;
tmp[2] += (dp[3]*dp[0])%mod_num;
tmp[3] = (dp[2]*(dp[1]+dp[3]))%mod_num;
tmp[3] += (dp[3]*dp[1])%mod_num;
if (n%2LL == 1LL) {
dp[0] = (tmp[0]+tmp[1])%mod_num;
dp[1] = (1LL+tmp[0])%mod_num;
dp[2] = (tmp[2]+tmp[3])%mod_num;
dp[3] = tmp[2]%mod_num;
} else {
dp[0] = tmp[0]%mod_num;
dp[1] = tmp[1]%mod_num;
dp[2] = tmp[2]%mod_num;
dp[3] = tmp[3]%mod_num;
}
//printf("%lld %lld %lld %lld %lld\n", n, dp[0], dp[1], dp[2], dp[3]);
return;
}
int main () {
long long n = 0LL;
int res = 0;
long long ans = 0LL;
long long mod_num = 998244353LL;
long long dp[4] = {};
res = scanf("%lld", &n);
func(n, mod_num, dp);
ans = (dp[0]+dp[1])%mod_num;
printf("%lld\n", ans);
return 0;
}
chro_96