結果
問題 | No.2959 Dolls' Tea Party |
ユーザー |
👑 |
提出日時 | 2024-10-22 08:52:12 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
MLE
|
実行時間 | - |
コード長 | 1,785 bytes |
コンパイル時間 | 5,608 ms |
コンパイル使用メモリ | 271,528 KB |
最終ジャッジ日時 | 2025-02-24 22:16:40 |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 2 MLE * 1 -- * 30 |
ソースコード
#include<bits/stdc++.h>#include<atcoder/all>#define rep(i,n) for(int i=0;i<n;i++)using namespace std;using mint = atcoder::modint998244353;// combination mod prime// https://youtu.be/8uowVvQ_-Mo?t=6002// https://youtu.be/Tgd_zLfRZOQ?t=9928struct modinv {int n; vector<mint> d;modinv(): n(2), d({0,1}) {}mint operator()(int i) {while (n <= i) d.push_back(-d[mint::mod()%n]*(mint::mod()/n)), ++n;return d[i];}mint operator[](int i) const { return d[i];}} invs;struct modfact {int n; vector<mint> d;modfact(): n(2), d({1,1}) {}mint operator()(int i) {while (n <= i) d.push_back(d.back()*n), ++n;return d[i];}mint operator[](int i) const { return d[i];}} facts;struct modfactinv {int n; vector<mint> d;modfactinv(): n(2), d({1,1}) {}mint operator()(int i) {while (n <= i) d.push_back(d.back()*invs(n)), ++n;return d[i];}mint operator[](int i) const { return d[i];}} ifacts;mint comb(int n, int k) {if (n < k || k < 0) return 0;return facts(n)*ifacts(k)*ifacts(n-k);}int main(){int n, k;cin >> n >> k;vector<int> a(n);rep(i, n) cin >> a[i];mint ans = 0;map<int, int> ma;for(int r = 1; r <= k; r++){int p = gcd(k, r);ma[p]++;}for(auto [p, t] : ma){int q = k / p;queue<vector<mint>> qu;qu.push(vector<mint>{1});rep(i, n){if(a[i] / q == 0) continue;vector<mint> f;for(int x = 0; x <= a[i] / q; x++){f.push_back(ifacts(x));}qu.push(f);}while(int(qu.size()) >= 2){auto f = qu.front(); qu.pop();auto g = qu.front(); qu.pop();auto h = atcoder::convolution(f, g);qu.push(h);}auto res = qu.front();if(int(res.size()) > p) ans += res[p] * facts(p) * t;}cout << (ans / k).val() << "\n";return 0;}