結果
問題 |
No.2156 ぞい文字列
|
ユーザー |
|
提出日時 | 2022-12-09 22:01:19 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,563 bytes |
コンパイル時間 | 2,011 ms |
コンパイル使用メモリ | 192,384 KB |
最終ジャッジ日時 | 2025-02-09 08:08:28 |
ジャッジサーバーID (参考情報) |
judge5 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | TLE * 4 |
other | TLE * 16 |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll = long long; ll const m = 998244353; int main () { ll N; cin >> N; N --; ll mat[2][2]; mat[0][0] = 0; mat[0][1] = mat[1][1] = mat[1][0] = 1; ll ret[2][2]; for (int i = 0; i < 2; i ++) { for (int j = 0; j < 2; j ++) { ret[i][j] = (i == j); } } while (N) { if (N & 1) { ll mat2[2][2]; for (int i = 0; i < 4; i ++) { mat2[i >> 1][i & 1] = 0; } for (int i = 0; i < 2; i ++) { for (int j = 0; j < 2; j ++) { for (int k = 0; k < 2; k ++) { mat2[i][j] += ret[i][k] * mat[k][j]; } mat2[i][j] %= m; } } for (int i = 0; i < 4; i ++) { ret[i >> 1][i & 1] = mat2[i >> 1][i & 1]; } } N >> 1; ll mat2[2][2]; for (int i = 0; i < 4; i ++) { mat2[i >> 1][i & 1] = 0; } for (int i = 0; i < 2; i ++) { for (int j = 0; j < 2; j ++) { for (int k = 0; k < 2; k ++) { mat2[i][j] += mat[i][k] * mat[k][j]; } mat2[i][j] %= m; } } for (int i = 0; i < 4; i ++) { mat[i >> 1][i & 1] = mat2[i >> 1][i & 1]; } } return 0; ll ans = ret[0][0] + ret[0][1] * 2; ans %= m; ans += m - 1; ans %= m; cout << ans << endl; }