結果

問題 No.1753 Don't cheat.
ユーザー chineristAC
提出日時 2021-11-19 22:03:56
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 2,433 ms / 3,000 ms
コード長 2,406 bytes
コンパイル時間 231 ms
コンパイル使用メモリ 82,452 KB
実行使用メモリ 85,560 KB
最終ジャッジ日時 2025-01-01 17:48:57
合計ジャッジ時間 80,630 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 30
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

N = 2*10**5
mod = 998244353
g1 = [1]*(N+1) #
g2 = [1]*(N+1) #
inverse = [1]*(N+1) #
for i in range( 2, N + 1 ):
g1[i]=( ( g1[i-1] * i ) % mod )
inverse[i]=( ( -inverse[mod % i] * (mod//i) ) % mod )
g2[i]=( (g2[i-1] * inverse[i]) % mod )
inverse[0]=0
def cmb(n, r, mod):
if ( r<0 or r>n ):
return 0
r = min(r, n-r)
return g1[n] * g2[r] * g2[n-r] % mod
def fwt(n,A):
assert len(A) == 2**n
for i in range(n):
t = 2**i
for j in range(2**n):
if j&t==0:
A[j] += A[j|t]
return A
def ifwt(n,A):
assert len(A) == 2**n
for i in range(n):
t = 2**i
for j in range(2**n):
if j&t==0:
A[j] -= A[j|t]
return A
inv = pow(1024,mod-2,mod)
def _fourier(f, inverse = False):
f = f[:]
n = (len(f) - 1).bit_length()
for d in range(n):
for U in range(1 << n):
if not U >> d & 1:
s, t = f[U], f[U | 1 << d]
f[U], f[U | 1 << d] = (s + t)%mod, (s - t)%mod
if inverse:
f = [v *inv % mod for v in f]
return f
def convolution(f, g):
return _fourier([a * b % mod for a, b in zip(_fourier(f), _fourier(g))], inverse = 1)
import sys,random,bisect
from collections import deque,defaultdict
from heapq import heapify,heappop,heappush
from itertools import permutations
from math import log,gcd
input = lambda :sys.stdin.readline()
mi = lambda :map(int,input().split())
li = lambda :list(mi())
N = int(input())
A = li()
S = sum(A)
P = [A[i]*pow(S,mod-2,mod)%mod for i in range(N+1)] + [0] * (1023-N)
res = P[0]
for i in range(1,1024):
f = [0] + [P[j] for j in range(1,1024)]
g = [f[j] for j in range(1024)]
g[i] = 0
af = _fourier(f)
ag = _fourier(g)
for j in range(1024):
af[j] = af[j] * pow(1-af[j],mod-2,mod) % mod
ag[j] = ag[j] * pow(1-ag[j],mod-2,mod) % mod
tmp = _fourier([af[i]-ag[i] for i in range(1024)],True)
#print(f,g)
#print([f[i]*30 % mod for i in range(4)])
res += P[0] * tmp[i] % mod
res %= mod
f = [0] + [P[j] for j in range(1,1024)]
af = _fourier(f)
for j in range(1024):
af[j] = af[j] * pow(1-af[j],mod-2,mod) % mod
ag[j] = ag[j] * pow(1-ag[j],mod-2,mod) % mod
f = _fourier(af,True)
res += P[0] * f[0] % mod
res %= mod
print((1-res)%mod)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0