結果
問題 | No.1682 Unfair Game |
ユーザー |
👑 ![]() |
提出日時 | 2021-09-20 14:39:29 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 42 ms / 2,000 ms |
コード長 | 1,632 bytes |
コンパイル時間 | 231 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 52,480 KB |
最終ジャッジ日時 | 2024-07-02 14:05:22 |
合計ジャッジ時間 | 2,183 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 20 |
ソースコード
"""https://yukicoder.me/problems/no/16821/2 のコインは含んではいけない。現在、奇数の確率が1/2より小さく1/2 - x であるとしよう。(0 <= x <= 1/2)偶数は1/2 + x である。pのコインを投げるとどうなるか?奇数は(1/2-x) * (1-p) + (1/2+x)*p = 1/2 - x - p/2 + px + p/2 + px = 1/2 - x + 2px偶数は(1/2-x) * p + (1/2+x)*(1-p) = p/2 - px + 1/2 + x - p/2 - px = 1/2 + x - 2pxつまり、2px変化する。p > 1/2 の時、奇数の確率は1/2より大きくなる。p < 1/2 の時、奇数の確率の1/2との大小は変化しない。1/2より大きいのコインを奇数枚選べばよい。1/2未満のコインは適当にとればよい"""import sysfrom sys import stdindef modfac(n, MOD):f = 1factorials = [1]for m in range(1, n + 1):f *= mf %= MODfactorials.append(f)inv = pow(f, MOD - 2, MOD)invs = [1] * (n + 1)invs[n] = invfor m in range(n, 1, -1):inv *= minv %= MODinvs[m - 1] = invreturn factorials, invsdef modnCr(n,r,mod,fac,inv): #上で求めたfacとinvsを引数に入れるべし(上の関数で与えたnが計算できる最大のnになる)return fac[n] * inv[n-r] * inv[r] % modmod = 10**9+7fac,inv = modfac(1000,mod)N = int(stdin.readline())P = list(map(int,stdin.readline().split()))mod = 10**9+7odd = 0eve = 0for i in P:if i > 50:odd += 1elif i < 50:eve += 1ans = 0ep = pow(2,eve,mod)for o in range(1,odd+1,2):ans += modnCr(odd,o,mod,fac,inv) * epprint (ans % mod)