結果
問題 |
No.3070 Collecting Coins Speedrun 2
|
ユーザー |
![]() |
提出日時 | 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 |
ソースコード
#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; }