結果
| 問題 |
No.265 数学のテスト
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 21:13:44 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,939 bytes |
| コンパイル時間 | 184 ms |
| コンパイル使用メモリ | 82,268 KB |
| 実行使用メモリ | 81,272 KB |
| 最終ジャッジ日時 | 2025-06-12 21:15:30 |
| 合計ジャッジ時間 | 4,619 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 30 RE * 2 |
ソースコード
import sys
from collections import defaultdict
def add_poly(a, b):
res = defaultdict(int)
for deg in a:
res[deg] += a[deg]
for deg in b:
res[deg] += b[deg]
return res
def multiply_poly(a, b):
res = defaultdict(int)
for deg_a, coeff_a in a.items():
for deg_b, coeff_b in b.items():
res[deg_a + deg_b] += coeff_a * coeff_b
return res
def derivative(poly):
res = defaultdict(int)
for deg, coeff in poly.items():
if deg == 0:
continue
res[deg - 1] += coeff * deg
return res
def parse_expression(s, i):
poly, i = parse_term(s, i)
while i < len(s) and s[i] == '+':
i += 1
term_poly, i = parse_term(s, i)
poly = add_poly(poly, term_poly)
return poly, i
def parse_term(s, i):
poly, i = parse_factor(s, i)
while i < len(s) and s[i] == '*':
i += 1
factor_poly, i = parse_factor(s, i)
poly = multiply_poly(poly, factor_poly)
return poly, i
def parse_factor(s, i):
if s[i] == 'd' and i + 1 < len(s) and s[i+1] == '{':
i += 2
expr_poly, i = parse_expression(s, i)
if i >= len(s) or s[i] != '}':
raise ValueError("Missing closing }")
i += 1
derived = derivative(expr_poly)
return derived, i
elif s[i] == 'x':
poly = defaultdict(int)
poly[1] = 1
return poly, i + 1
elif s[i].isdigit():
num = int(s[i])
poly = defaultdict(int)
poly[0] = num
return poly, i + 1
else:
raise ValueError(f"Unexpected character at {i}: {s[i]}")
def main():
input = sys.stdin.read().split()
N = int(input[0])
d = int(input[1])
S = input[2]
poly, _ = parse_expression(S, 0)
result = []
for degree in range(d + 1):
result.append(str(poly.get(degree, 0)))
print(' '.join(result))
if __name__ == '__main__':
main()
gew1fw