提出 #32926371


ソースコード 拡げる

/** @file
 * @ingroup


 */
#include <bits/stdc++.h>
using namespace std;
template <typename T> inline void O(const T &x) { cout << x << '\n'; }
template <typename T, typename... W> inline void O(const T &x, const W &...b) {
  cout << x << ' ';
  O(b...);
}
template <typename T> inline void rd(T &x) { cin >> x; }
template <typename T, typename... W> inline void rd(T &x, W &...b) {
  cin >> x;
  rd(b...);
}
#ifndef MISAKA
#define err(...)
#else
#define err(...) fprintf(stderr, __VA_ARGS__)
#endif
typedef long long i64;
typedef unsigned long long u64;
typedef unsigned u32;
typedef long double dbl;
typedef pair<int, int> pii;
typedef uniform_int_distribution<int> r32;
typedef uniform_int_distribution<i64> r64;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
#define shuf(L, R) shuffle((L), (R), rng)
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define FOR(i, j, k) for (int i = (j); i <= (k); ++i)
#define ROF(i, j, k) for (int i = (k); i >= (j); --i)
template <typename T> inline void ckmin(T &a, const T &b) { a = min(a, b); }
template <typename T> inline void ckmax(T &a, const T &b) { a = max(a, b); }
//#define IOFILE "ex"
//#define MULTI
const int N = 1e5+5;
const int mod = 998244353;

struct mat {
  int a[2][2] = {};
  mat operator+(const mat &r) const {
    mat ret;
    FOR(i,0,1) FOR(j,0,1) {
      ret.a[i][j] = (a[i][j] + r.a[i][j]) % mod;
    }
    return ret;
  }
  mat operator*(const mat &r) const {
    mat ret;
    FOR(i,0,1) FOR(j,0,1) FOR(k,0,1) {
      ret.a[i][j] = (ret.a[i][j] + 1ll * a[i][k] * r.a[k][j]) % mod;
    }
    return ret;
  }
  mat operator*(const int &x) const {
    mat ret;
    FOR(i,0,1) FOR(j,0,1) {
      ret.a[i][j] = 1ll * a[i][j] * x % mod;
    }
    return ret;
  }
  inline int val() {
    return a[1][0];
  }
};

const mat h = {{{1,1},{1,0}}};
const mat ih = {{{0,1},{1,mod-1}}};
const mat e = {{{1,0},{0,1}}};

mat q_pow(i64 a) {
  mat ret = e, hi = h;
  while (a) {
    if (a & 1) ret = ret * hi;
    hi = hi * hi;
    a >>= 1;
  }
  return ret;
}

mat iq_pow(i64 a) {
  mat ret = e, hi = ih;
  while (a) {
    if (a & 1) ret = ret * hi;
    hi = hi * hi;
    a >>= 1;
  }
  return ret;
}

i64 a[N];
mat H[N], iH[N];
int f[N];

inline void sol() {
  int n;
  i64 S;
  rd(n, S);
  FOR(i,1,n) rd(a[i]);
  a[++n] = S;
  FOR(i,1,n) H[i] = q_pow(a[i]), iH[i] = iq_pow(a[i]);
  mat pre;
  FOR(i,1,n) {
    f[i] = (H[i].val() + mod - (H[i] * pre).val()) % mod;
    pre = pre + iH[i] * f[i];
  }
  O(f[n]);
}

int main() {
#ifndef MISAKA
#ifdef IOFILE
  freopen(IOFILE ".in", "r", stdin);
  freopen(IOFILE ".out", "w", stdout);
#endif
  ios::sync_with_stdio(0);
  cin.tie(0);
#endif
#ifdef MULTI
  int T;
  cin >> T;
  while (T--)
#endif
    sol();
  return 0;
}

提出情報

提出日時
問題 Ex - Odd Steps
ユーザ misaka18931
言語 C++ (GCC 9.2.1)
得点 600
コード長 2909 Byte
結果 AC
実行時間 226 ms
メモリ 7912 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 600 / 600
結果
AC × 3
AC × 31
セット名 テストケース
Sample example_00.txt, example_01.txt, example_02.txt
All example_00.txt, example_01.txt, example_02.txt, min_00.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt
ケース名 結果 実行時間 メモリ
example_00.txt AC 8 ms 3608 KiB
example_01.txt AC 2 ms 3512 KiB
example_02.txt AC 2 ms 3552 KiB
min_00.txt AC 2 ms 3564 KiB
test_00.txt AC 226 ms 7756 KiB
test_01.txt AC 218 ms 7808 KiB
test_02.txt AC 219 ms 7892 KiB
test_03.txt AC 218 ms 7820 KiB
test_04.txt AC 219 ms 7820 KiB
test_05.txt AC 219 ms 7768 KiB
test_06.txt AC 133 ms 6132 KiB
test_07.txt AC 207 ms 7716 KiB
test_08.txt AC 101 ms 5344 KiB
test_09.txt AC 165 ms 6764 KiB
test_10.txt AC 186 ms 7424 KiB
test_11.txt AC 33 ms 4032 KiB
test_12.txt AC 84 ms 5172 KiB
test_13.txt AC 26 ms 3856 KiB
test_14.txt AC 159 ms 6672 KiB
test_15.txt AC 81 ms 4956 KiB
test_16.txt AC 112 ms 5532 KiB
test_17.txt AC 160 ms 6864 KiB
test_18.txt AC 91 ms 5140 KiB
test_19.txt AC 207 ms 7720 KiB
test_20.txt AC 85 ms 7912 KiB
test_21.txt AC 84 ms 7808 KiB
test_22.txt AC 75 ms 7808 KiB
test_23.txt AC 34 ms 4932 KiB
test_24.txt AC 71 ms 7100 KiB
test_25.txt AC 60 ms 6512 KiB
test_26.txt AC 34 ms 5052 KiB