結果

問題 No.2944 Sigma Partition Problem
ユーザー cled0328
提出日時 2024-10-18 23:19:09
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,018 bytes
コンパイル時間 2,233 ms
コンパイル使用メモリ 211,612 KB
最終ジャッジ日時 2025-02-24 21:18:12
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample WA * 1 TLE * 1
other -- * 24
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
#include <atcoder/modint>
#include <atcoder/fenwicktree>
using namespace std;
using mint=atcoder::modint998244353;
map<pair<int,int>,mint> mm;
map<tuple<int,int,int>,mint> lm;
mint mf(int n,int k){
    if(n<0)return 0;
    if(n==0)return 1;
    if(k<=0)return 0;
    if(k==1)return 1;
    if(mm.count({n,k}))return mm[{n,k}];
    mint ret=0;
    for(int i=1;i<=k;i++){
        ret+=mf(n-i,i);
    }
    return mm[{n,k}]=ret;
}
mint lf(int n,int k,int mx){
    if((long long)mx*k<n)return 0;
    if(k<=0)return 0;
    if(k==1)return 1;
    if(lm.count({n,k,mx}))return lm[{n,k,mx}];
    mint ret=0;
    for(int i=1;i<=mx;i++){
        ret+=lf(n-i,k-1,i);
    }
    return lm[{n,k,mx}]=ret;
}

int main(){
    int q;cin>>q;

    while(q--){
        int op;cin>>op;
        int n,k;cin>>n>>k;
        if(op==1){
            cout<<mf(n,k).val()<<"\n";
        }else{
            mint ans=0;
            for(int i=1;i<=k;i++)ans+=lf(n,i,n);
            cout<<ans.val()<<"\n";
        }
    }
    
}
0