結果

問題 No.2083 OR Subset
ユーザー taiga0629kyoprotaiga0629kyopro
提出日時 2022-08-26 00:45:47
言語 PyPy3
(7.3.15)
結果
RE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,758 bytes
コンパイル時間 370 ms
コンパイル使用メモリ 87,016 KB
実行使用メモリ 231,660 KB
最終ジャッジ日時 2023-08-07 21:10:21
合計ジャッジ時間 9,239 ms
ジャッジサーバーID
(参考情報)
judge12 / judge14
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 289 ms
228,924 KB
testcase_01 AC 286 ms
229,056 KB
testcase_02 AC 292 ms
229,244 KB
testcase_03 RE -
testcase_04 AC 432 ms
229,176 KB
testcase_05 RE -
testcase_06 AC 414 ms
229,160 KB
testcase_07 AC 305 ms
229,104 KB
testcase_08 AC 315 ms
229,140 KB
testcase_09 RE -
testcase_10 AC 452 ms
229,288 KB
testcase_11 AC 388 ms
229,168 KB
testcase_12 AC 353 ms
229,132 KB
testcase_13 RE -
testcase_14 RE -
testcase_15 RE -
testcase_16 RE -
testcase_17 RE -
testcase_18 AC 280 ms
229,200 KB
testcase_19 RE -
権限があれば一括ダウンロードができます

ソースコード

diff #




#############################
#############
cnb_max=10**5
mod=998244353
#############

kai=[1]*(cnb_max+1)
rkai=[1]*(cnb_max+1)
for i in range(cnb_max):
    kai[i+1]=kai[i]*(i+1)%mod

rkai[cnb_max]=pow(kai[cnb_max],mod-2,mod)
for i in range(cnb_max):
    rkai[cnb_max-1-i]=rkai[cnb_max-i]*(cnb_max-i)%mod

def cnb(x,y):
    if y>x:
        return 0
    if x<0:return 0
    if y<0:return 0
    return (kai[x]*rkai[y]%mod)*rkai[x-y]%mod


def inv(n):
    return kai[n-1]*rkai[n]%mod

##################################



def sol1(n):
    #O(N^3)
    dp=[[0]*(n+1) for i in range(n+1)]
    dp[0][0]=1
    for i in range(1,n+1):
            for j in range(n+1):
                for cnti in range(1,n+1):
                    if j-cnti<0:continue
                    dp[i][j]+=dp[i-1][j-cnti]*cnb(n-(j-cnti),cnti)
                    dp[i][j]%=mod
    def f(k):
        if k==0:return 1
        ans=0
        for s in range(1,n+1):
            ans+=dp[k][s]*pow((pow(2,k,mod)-k)%mod,n-s,mod)
            ans%=mod
        return ans
    ans=0
    for k in range(n+1):
        ans+=f(k)*rkai[k]
        ans%=mod
    return ans

def _(i,j):
    if min(i,j)<0:return -1
    return i*3010+j
num=[0]*3100**2
st=[0]*3100**2
for k in range(1,3001):
    nod=pow(2,k,mod)-k
    nod%=mod
    num[_(k,0)]=1
    for i in range(1,3001):
        num[_(k,i)]=num[_(k,i-1)]*nod%mod
st[_(0,0)]=1
for i in range(1,3001):
    for j in range(1,i+1):
        st[_(i,j)]=st[_(i-1,j-1)]+st[_(i-1,j)]*j
        st[_(i,j)]%=mod

def sol2(n):
    #O(N^2)
    ans=1
    for k in range(1,n+1):
        for m in range(k,n+1):
            res=cnb(n,m)*st[_(m,k)]%mod
            res*=num[_(k,n-m)]
            ans+=res
            ans%=mod
    return ans%mod

n=int(input())
print(sol2(n))
0