結果

問題 No.3070 Collecting Coins Speedrun 2
ユーザー tobbie
提出日時 2025-04-09 22:13:59
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,228 bytes
コンパイル時間 2,446 ms
コンパイル使用メモリ 196,844 KB
実行使用メモリ 7,844 KB
最終ジャッジ日時 2025-04-09 22:14:05
合計ジャッジ時間 5,966 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 17 WA * 15
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

using ll = long long int;

#define rep(i, n) for (int i = 0; i < (int)n; i++)

int mod_inv(int i, int mod) {
  int x = i;
  int y = mod, u = 1, v = 0;
  while (y) {
    int t = x / y;
    x -= t * y; swap(x, y);
    u -= t * v; swap(u, v);
  }
  return (u + mod) % mod;
}

int mod_div(int x, int y, int mod) {
  return ((ll)x * mod_inv(y, mod)) % mod;
}

int mod_pow(int i, int y, int mod) {
  int x = i;
  int ret = 1;
  while (y > 0) {
    if ((y & 0x01) != 0)
      ret = (long long)ret * x % mod;
    x = (long long)x * x % mod;
    y >>= 1;
  }
  return ret;
}

int main() {
  const int mod = 998244353;
  int n; cin >> n;
  vector<int> cm, cp;
  int czn = 0;
  rep(i, n) {
    int c; cin >> c;
    if (c < 0)      cm.push_back(-c);
    else if (c > 0) cp.push_back(c);
    else czn++;
  }
  int cmn = (int)cm.size();
  int cpn = (int)cp.size();
  int a = 1, b = 1;
  if (cmn > 0)
    a = mod_pow(2, cmn - 1, mod);
  if (cpn > 0)
    b = mod_pow(2, cpn - 1, mod);
  int ans = ((ll)a * (ll)b * 2) % mod;
  if (czn > 0) {
    if (cmn > 0 && cpn > 0)
      ans = ((ll)ans * 3) % mod;
    else if (cmn > 0 || cpn > 0)
      ans = ((ll)ans * 2) % mod;
  }
  cout << ans << endl;
}
0