結果
問題 |
No.2131 Concon Substrings (COuNt Version)
|
ユーザー |
![]() |
提出日時 | 2022-10-26 22:57:48 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 4 ms / 2,000 ms |
コード長 | 1,277 bytes |
コンパイル時間 | 555 ms |
コンパイル使用メモリ | 72,972 KB |
最終ジャッジ日時 | 2025-02-08 13:03:31 |
ジャッジサーバーID (参考情報) |
judge1 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 16 |
コンパイルメッセージ
main.cpp: In function ‘ll my_pow(ll, ll, ll)’: main.cpp:17:12: warning: ‘ret’ may be used uninitialized [-Wmaybe-uninitialized] 17 | return ret; | ^~~ main.cpp:7:8: note: ‘ret’ was declared here 7 | ll ret; | ^~~
ソースコード
#include <iostream> #include <vector> using namespace std; typedef long long ll; ll my_pow(ll x, ll n, ll mod){ ll ret; if (n == 0){ ret = 1; } else if (n % 2 == 0){ ret = my_pow((x * x) % mod, n / 2, mod); } else if (n % 2 == 1){ ret = (x * my_pow((x * x) % mod, n / 2, mod)) % mod; } return ret; } ll inv(ll x, ll mod){ return my_pow(x, mod - 2, mod); } ll comb(ll n, ll r, vector<ll> &fact, vector<ll> &fact_inv, ll mod){ ll ret = (fact_inv[r] * fact_inv[n - r]) % mod; ret = (ret * fact[n]) % mod; return ret; } int main(){ ll N; cin >> N; ll mod = 998244353; vector<ll> fact(N + 2, 0); fact[0] = 1; for (ll i = 0; i <= N; i++){ fact[i + 1] = (fact[i] * (i + 1)) % mod; } vector<ll> fact_inv(N + 2); for (ll i = 0; i <= N + 1; i++){ fact_inv[i] = inv(fact[i], mod); } vector<ll> pow_25(N + 2); pow_25[0] = 1; for (ll i = 0; i <= N; i++){ pow_25[i + 1] = (pow_25[i] * 25LL) % mod; } ll ans = 0; for (ll i = 0; i <= N; i++){ ll comb1 = comb(N, i, fact, fact_inv, mod); comb1 = (comb1 * pow_25[N - i]) % mod; ans = (ans + comb1 * (i / 3)) % mod; } cout << ans << endl; }