Diff
checker
テキスト
テキスト
画像
ドキュメント
Excel
フォルダ
Legal
Enterprise
デスクトップ
料金
ログイン
Diffchecker デスクトップのダウンロード
テキスト比較
2 つのテキスト ファイルの違いを見つける
ツール
履歴
ライブエディター
空白の変更を非表示
未変更行を折りたたむ
折り返しなし
レイアウト
分割
統合
比較精度
スマート
単語
文字
テキストスタイル
外観を変更
シンタックスハイライト
構文を選択
無視
テキスト変換
最初の差分へ移動
入力を編集
Diffchecker Desktop
Diffcheckerを実行する最も安全な方法。Diffchecker Desktopアプリを入手:あなたの差分はコンピューターから出ることはありません!
Desktopを入手
gawkmaster069 C
作成日
8 か月前
差分は期限切れになりません
クリア
エクスポート
共有
説明
43 削除
行
合計
削除
文字
合計
削除
この機能を引き続き使用するには、アップグレードしてください
Diff
checker
Pro
価格を見る
34 行
すべてコピー
73 追加
行
合計
追加
文字
合計
追加
この機能を引き続き使用するには、アップグレードしてください
Diff
checker
Pro
価格を見る
64 行
すべてコピー
import sys
import sys
コピー
コピー済み
コピー
コピー済み
def main(
):
input = sys.stdin.readline
input = sys.stdin.read
data = input().split()
def power(base, exp, P
):
T = int(data[0])
res = 1
idx = 1
base %= P
for _ in range(T):
while exp > 0:
n
=
int(data[idx])
if exp & 1:
m = int(data[idx
+ 1
])
res = (res * base) % P
p
=
int(data[idx + 2]
)
base = (base * base) % P
idx += 3
exp >>= 1
mm = m % p
return res
if mm == 0:
print(n % p)
def modInverse(n, P):
continue
return power(n, P - 2, P)
invm = pow(mm, p - 2, p)
C = [0] * (n + 1)
def solve():
C[0] = 1
N, M, P = map(int, input().split())
for i in range(1, n + 1):
invM = modInverse(M, P)
for j in range(i, 0, -1):
C[j] = (C[j] + C[j - 1]) % p
centers = []
ans = C[1] % p
for i in range(N):
invm_pow = 1
max_rad
=
min(i, N - 1 - i)
for k in range(1, n // 2
+
1):
centers.append((max_rad
+ 1
, 1))
invm_pow
=
(invm_pow
*
invm)
%
p
for i in range(N - 1):
l_odd
=
2 * k + 1
max_rad
=
min(i, N - 2 - i
)
if l_odd <= n:
centers.append((max_rad + 1, invM))
ans = (ans + C[l_odd] * invm_pow % p) % p
l_even = 2 * k
globalSum = 0
if l_even <= n:
for cnt, start_prob in centers:
ans = (ans + C[l_even] * invm_pow % p) % p
if invM == 1:
print(ans)
term_sum = (cnt % P) * start_prob % P
if __name__ == "__main__"
:
else:
main()
num = (1 - power(invM, cnt, P) + P) % P
den = (1 - invM + P) % P
term_sum = start_prob * num % P * modInverse(den, P) % P
globalSum = (globalSum + term_sum) % P
ans = globalSum * globalSum % P
for cnt, start_prob in centers:
if invM == 1:
sum_q = (cnt % P) * start_prob % P
else:
num = (1 - power(invM, cnt, P) + P) % P
den = (1 - invM
+
P) % P
sum_q
=
start_prob
*
num
%
P * modInverse(den, P) % P
sumSq
=
sum_q * sum_q % P
trueSum = 0
p_curr = start_prob
for x in range(cnt):
trueSum = (trueSum + (2*x + 1) * p_curr) % P
p_curr = (p_curr * invM) % P
ans = (ans - sumSq + P) % P
ans = (ans + trueSum) % P
print(ans)
t = int(input())
for _ in range(t)
:
solve()
保存された差分
原文
ファイルを開く
import sys def main(): input = sys.stdin.read data = input().split() T = int(data[0]) idx = 1 for _ in range(T): n = int(data[idx]) m = int(data[idx + 1]) p = int(data[idx + 2]) idx += 3 mm = m % p if mm == 0: print(n % p) continue invm = pow(mm, p - 2, p) C = [0] * (n + 1) C[0] = 1 for i in range(1, n + 1): for j in range(i, 0, -1): C[j] = (C[j] + C[j - 1]) % p ans = C[1] % p invm_pow = 1 for k in range(1, n // 2 + 1): invm_pow = (invm_pow * invm) % p l_odd = 2 * k + 1 if l_odd <= n: ans = (ans + C[l_odd] * invm_pow % p) % p l_even = 2 * k if l_even <= n: ans = (ans + C[l_even] * invm_pow % p) % p print(ans) if __name__ == "__main__": main()
変更されたテキスト
ファイルを開く
import sys input = sys.stdin.readline def power(base, exp, P): res = 1 base %= P while exp > 0: if exp & 1: res = (res * base) % P base = (base * base) % P exp >>= 1 return res def modInverse(n, P): return power(n, P - 2, P) def solve(): N, M, P = map(int, input().split()) invM = modInverse(M, P) centers = [] for i in range(N): max_rad = min(i, N - 1 - i) centers.append((max_rad + 1, 1)) for i in range(N - 1): max_rad = min(i, N - 2 - i) centers.append((max_rad + 1, invM)) globalSum = 0 for cnt, start_prob in centers: if invM == 1: term_sum = (cnt % P) * start_prob % P else: num = (1 - power(invM, cnt, P) + P) % P den = (1 - invM + P) % P term_sum = start_prob * num % P * modInverse(den, P) % P globalSum = (globalSum + term_sum) % P ans = globalSum * globalSum % P for cnt, start_prob in centers: if invM == 1: sum_q = (cnt % P) * start_prob % P else: num = (1 - power(invM, cnt, P) + P) % P den = (1 - invM + P) % P sum_q = start_prob * num % P * modInverse(den, P) % P sumSq = sum_q * sum_q % P trueSum = 0 p_curr = start_prob for x in range(cnt): trueSum = (trueSum + (2*x + 1) * p_curr) % P p_curr = (p_curr * invM) % P ans = (ans - sumSq + P) % P ans = (ans + trueSum) % P print(ans) t = int(input()) for _ in range(t): solve()
違いを見つける