結果

問題 No.2944 Sigma Partition Problem
ユーザー cled0328cled0328
提出日時 2024-10-18 23:19:09
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 1,018 bytes
コンパイル時間 2,731 ms
コンパイル使用メモリ 221,956 KB
実行使用メモリ 29,856 KB
最終ジャッジ日時 2024-10-18 23:19:18
合計ジャッジ時間 7,738 ms
ジャッジサーバーID
(参考情報)
judge6 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
testcase_01 TLE -
testcase_02 -- -
testcase_03 -- -
testcase_04 -- -
testcase_05 -- -
testcase_06 -- -
testcase_07 -- -
testcase_08 -- -
testcase_09 -- -
testcase_10 -- -
testcase_11 -- -
testcase_12 -- -
testcase_13 -- -
testcase_14 -- -
testcase_15 -- -
testcase_16 -- -
testcase_17 -- -
testcase_18 -- -
testcase_19 -- -
testcase_20 -- -
testcase_21 -- -
testcase_22 -- -
testcase_23 -- -
testcase_24 -- -
testcase_25 -- -
権限があれば一括ダウンロードができます

ソースコード

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