結果
問題 |
No.265 数学のテスト
|
ユーザー |
![]() |
提出日時 | 2025-04-15 21:46:19 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
|
実行時間 | - |
コード長 | 3,013 bytes |
コンパイル時間 | 434 ms |
コンパイル使用メモリ | 82,112 KB |
実行使用メモリ | 107,804 KB |
最終ジャッジ日時 | 2025-04-15 21:47:54 |
合計ジャッジ時間 | 6,609 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 30 RE * 2 |
ソースコード
from collections import defaultdict def add_polynomials(a, b): result = defaultdict(int) for exp, coeff in a.items(): result[exp] += coeff for exp, coeff in b.items(): result[exp] += coeff return {exp: coeff for exp, coeff in result.items() if coeff != 0} def multiply_polynomials(a, b): result = defaultdict(int) for exp1, coeff1 in a.items(): for exp2, coeff2 in b.items(): exp = exp1 + exp2 result[exp] += coeff1 * coeff2 return {exp: coeff for exp, coeff in result.items() if coeff != 0} def compute_derivative(poly): derivative = defaultdict(int) for exp, coeff in poly.items(): if exp >= 1: new_exp = exp - 1 derivative[new_exp] += coeff * exp return {exp: coeff for exp, coeff in derivative.items() if coeff != 0} def parse_expression(s): terms = [] remaining = s while True: term, remaining = parse_term(remaining) terms.append(term) if not remaining.startswith('+'): break remaining = remaining[1:] result = defaultdict(int) for term in terms: for exp, coeff in term.items(): result[exp] += coeff return {exp: coeff for exp, coeff in result.items() if coeff != 0} def parse_term(s): factors = [] remaining = s while True: factor, remaining = parse_factor(remaining) factors.append(factor) if not remaining.startswith('*'): break remaining = remaining[1:] if not factors: return defaultdict(int), remaining result = factors[0].copy() for factor in factors[1:]: temp = defaultdict(int) for exp1, coeff1 in result.items(): for exp2, coeff2 in factor.items(): exp = exp1 + exp2 temp[exp] += coeff1 * coeff2 result = {exp: coeff for exp, coeff in temp.items() if coeff != 0} return result, remaining def parse_factor(s): if not s: return {}, '' if s[0] == 'd' and len(s) >= 2 and s[1] == '{': stack = 1 i = 2 while i < len(s) and stack > 0: if s[i] == '{': stack += 1 elif s[i] == '}': stack -= 1 i += 1 inner_expr = s[2:i-1] inner_poly = parse_expression(inner_expr) derivative_poly = compute_derivative(inner_poly) remaining = s[i:] return derivative_poly, remaining elif s[0].isdigit(): coeff = int(s[0]) return {0: coeff}, s[1:] elif s[0] == 'x': return {1: 1}, s[1:] else: raise ValueError(f"Unexpected character: {s[0]}") def main(): import sys input = sys.stdin.read().split() N = int(input[0]) d = int(input[1]) S = input[2] parsed_poly = parse_expression(S) output = [] for exp in range(d + 1): output.append(str(parsed_poly.get(exp, 0))) print(' '.join(output)) if __name__ == '__main__': main()