結果

問題 No.2083 OR Subset
ユーザー taiga0629kyoprotaiga0629kyopro
提出日時 2022-08-26 00:45:47
言語 PyPy3
(7.3.15)
結果
RE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,758 bytes
コンパイル時間 183 ms
コンパイル使用メモリ 82,164 KB
実行使用メモリ 229,400 KB
最終ジャッジ日時 2024-04-25 15:31:11
合計ジャッジ時間 7,365 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 249 ms
228,152 KB
testcase_01 AC 249 ms
228,536 KB
testcase_02 AC 260 ms
228,024 KB
testcase_03 RE -
testcase_04 AC 400 ms
228,244 KB
testcase_05 RE -
testcase_06 AC 382 ms
228,192 KB
testcase_07 AC 273 ms
228,280 KB
testcase_08 AC 279 ms
228,320 KB
testcase_09 RE -
testcase_10 AC 421 ms
228,332 KB
testcase_11 AC 350 ms
228,144 KB
testcase_12 AC 313 ms
228,216 KB
testcase_13 RE -
testcase_14 RE -
testcase_15 RE -
testcase_16 RE -
testcase_17 RE -
testcase_18 AC 244 ms
228,288 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