結果
問題 | No.265 数学のテスト |
ユーザー |
![]() |
提出日時 | 2025-03-31 17:42:43 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
|
実行時間 | - |
コード長 | 3,086 bytes |
コンパイル時間 | 171 ms |
コンパイル使用メモリ | 82,484 KB |
実行使用メモリ | 85,116 KB |
最終ジャッジ日時 | 2025-03-31 17:43:45 |
合計ジャッジ時間 | 5,500 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 29 RE * 3 |
ソースコード
class Node:def evaluate(self, d):passclass ConstantNode(Node):def __init__(self, value):self.value = valuedef evaluate(self, d):coeff = [0] * (d + 1)coeff[0] = self.valuereturn coeffclass XNode(Node):def evaluate(self, d):coeff = [0] * (d + 1)if d >= 1:coeff[1] = 1return coeffclass AddNode(Node):def __init__(self, left, right):self.left = leftself.right = rightdef evaluate(self, d):left_coeff = self.left.evaluate(d)right_coeff = self.right.evaluate(d)return [left_coeff[i] + right_coeff[i] for i in range(d + 1)]class MultiplyNode(Node):def __init__(self, left, right):self.left = leftself.right = rightdef evaluate(self, d):left_coeff = self.left.evaluate(d)right_coeff = self.right.evaluate(d)result = [0] * (d + 1)for a in range(d + 1):if left_coeff[a] == 0:continuefor b in range(d + 1):if right_coeff[b] == 0:continueif a + b <= d:result[a + b] += left_coeff[a] * right_coeff[b]return resultclass DerivNode(Node):def __init__(self, child):self.child = childdef evaluate(self, d):child_coeff = self.child.evaluate(d)deriv_coeff = [0] * (d + 1)for i in range(d + 1):if i + 1 <= d:deriv_coeff[i] = (i + 1) * child_coeff[i + 1]else:deriv_coeff[i] = 0return deriv_coeffdef parse_expression(s, pos=0):node, pos = parse_term(s, pos)while pos < len(s) and s[pos] == '+':pos += 1next_node, pos = parse_term(s, pos)node = AddNode(node, next_node)return node, posdef parse_term(s, pos):node, pos = parse_factor(s, pos)while pos < len(s) and s[pos] == '*':pos += 1next_node, pos = parse_factor(s, pos)node = MultiplyNode(node, next_node)return node, posdef parse_factor(s, pos):if pos < len(s) and s[pos] == 'd' and pos + 1 < len(s) and s[pos + 1] == '{':pos += 2child, pos = parse_expression(s, pos)if pos >= len(s) or s[pos] != '}':raise ValueError("Missing closing brace")pos += 1return DerivNode(child), poselse:return parse_primary(s, pos)def parse_primary(s, pos):if pos >= len(s):raise ValueError("Unexpected end of input")c = s[pos]if c == 'x':return XNode(), pos + 1elif c.isdigit():val = int(c)return ConstantNode(val), pos + 1else:raise ValueError(f"Unexpected character {c} at position {pos}")# Read inputn = int(input())d = int(input())s = input().strip()# Parse the expressionast, pos = parse_expression(s, 0)if pos != len(s):raise ValueError("Invalid input")# Evaluate and outputresult = ast.evaluate(d)print(' '.join(map(str, result)))